การใช้ Aggregate Function COUNT() กับ GROUP BY
จัดกลุ่มข้อมูลตามค่าของคอลัมน์ แล้วนับจำนวนแถวในแต่ละกลุ่ม
รูปแบบคำสั่ง
SELECT yourColumnName, COUNT(*) AS anyVariableName FROM yourTableName GROUP BY yourColumnName;
ตัวอย่างสร้างตารางและข้อมูล
mysql> CREATE TABLE CountSameValue (
-> Id INT,
-> Name VARCHAR(100),
-> Marks INT
-> );
Query OK, 0 rows affected (0.70 sec)
mysql> INSERT INTO CountSameValue VALUES(1,'Sam',67);
mysql> INSERT INTO CountSameValue VALUES(2,'Mike',87);
mysql> INSERT INTO CountSameValue VALUES(3,'Carol',67);
mysql> INSERT INTO CountSameValue VALUES(4,'Bob',87);
mysql> INSERT INTO CountSameValue VALUES(5,'John',71);
mysql> INSERT INTO CountSameValue VALUES(6,'Adam',66);
mysql> INSERT INTO CountSameValue VALUES(7,'David',71);
mysql> INSERT INTO CountSameValue VALUES(8,'Maria',67);
ข้อมูลทั้งหมด
mysql> SELECT * FROM CountSameValue;
+------+-------+-------+ | Id | Name | Marks | +------+-------+-------+ | 1 | Sam | 67 | | 2 | Mike | 87 | | 3 | Carol | 67 | | 4 | Bob | 87 | | 5 | John | 71 | | 6 | Adam | 66 | | 7 | David | 71 | | 8 | Maria | 67 | +------+-------+-------+ 8 rows in set (0.00 sec)
คำสั่งนับจำนวน Marks ที่ซ้ำกัน
mysql> SELECT Marks, COUNT(*) AS Total FROM CountSameValue GROUP BY Marks;
+-------+-------+ | Marks | Total | +-------+-------+ | 67 | 3 | | 87 | 2 | | 71 | 2 | | 66 | 1 | +-------+-------+ 4 rows in set (0.00 sec)
การประยุกต์ใช้:
- หาค่าที่ซ้ำมากที่สุด:
ORDER BY Total DESC LIMIT 1 - กรองเฉพาะที่ซ้ำ:
HAVING COUNT(*) > 1 - นับ distinct values:
COUNT(DISTINCT column)