GROUP BY + COUNT() + MAX() ในคำสั่งเดียว
จัดกลุ่มตามคอลัมน์ Value (ที่มีค่าเหมือนกันทุกแถว) นับจำนวนแถวในกลุ่ม และหา ClientId สูงสุดในกลุ่ม
สร้างตารางและข้อมูล (Value เหมือนกันทุกแถว = 678)
mysql> CREATE TABLE DemoTable (ClientId INT, Value INT); Query OK, 0 rows affected (0.79 sec) mysql> INSERT INTO DemoTable VALUES(10, 678), (20, 678), (30, 678); Query OK, 3 rows affected
ข้อมูลทั้งหมด
+----------+-------+ | ClientId | Value | +----------+-------+ | 10 | 678 | | 20 | 678 | | 30 | 678 | +----------+-------+
คำสั่ง: GROUP BY Value, COUNT(ClientId), MAX(ClientId)
mysql> SELECT COUNT(tbl.ClientId), MAX(tbl.ClientId) FROM DemoTable tbl GROUP BY Value;
ผลลัพธ์
+---------------------+-------------------+ | count(tbl.ClientId) | max(tbl.ClientId) | +---------------------+-------------------+ | 3 | 30 | +---------------------+-------------------+
คำอธิบาย
GROUP BY Value- ทุกแถว Value=678 อยู่ในกลุ่มเดียวCOUNT(tbl.ClientId)- นับ 3 แถวMAX(tbl.ClientId)- หาค่า ClientId สูงสุด = 30
ขยาย: GROUP BY หลายคอลัมน์ + Multiple Aggregates
SELECT
Value,
COUNT(*) AS cnt,
MAX(ClientId) AS max_id,
MIN(ClientId) AS min_id,
AVG(ClientId) AS avg_id,
SUM(ClientId) AS sum_id
FROM DemoTable
GROUP BY Value;
⚠️ หมายเหตุเรื่อง "GROUP BY ไม่ทำงานถ้าใช้ COUNT" ในหัวข้อบทความ
หัวข้อเดิมกล่าวว่า "GROUP BY does not work if COUNT is used" → ไม่ถูกต้อง
GROUP BY ทำงานปกติร่วมกับ COUNT() และ Aggregate Functions อื่นๆ ได้ทุกฟังก์ชัน
อาจเกิดจากเข้าใจผิดหรือ Typo ในคำถามต้นฉบับ
Best Practice: ใช้ Alias และ Backticks
SELECT
`Value`,
COUNT(`ClientId`) AS `client_count`,
MAX(`ClientId`) AS `max_client_id`
FROM `DemoTable`
GROUP BY `Value`;