Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

GROUP BY และ COUNT ใน MySQL Query เดียว: จัดกลุ่มซ้ำและแสดง Max Value

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`;