บทนำ
การนับความถี่ (Frequency) ของแต่ละค่าในคอลัมน์ ใช้ GROUP BY ร่วมกับ COUNT(*)
ตัวอย่างการสร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
-> Number INT
-> );
Query OK, 0 rows affected (0.83 sec)
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(20);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(30);
mysql> INSERT INTO DemoTable VALUES(10);
mysql> INSERT INTO DemoTable VALUES(10);
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์
+--------+
| Number |
+--------+
| 20 |
| 20 |
| 10 |
| 30 |
| 10 |
| 10 |
+--------+
6 rows in set (0.00 sec)
คำสั่งนับจำนวนแต่ละค่า
mysql> SELECT Number, COUNT(*) FROM DemoTable GROUP BY Number;
ผลลัพธ์
+--------+----------+
| Number | COUNT(*) |
+--------+----------+
| 20 | 2 |
| 10 | 3 |
| 30 | 1 |
+--------+----------+
3 rows in set (0.00 sec)
คำอธิบาย
GROUP BY Numberจัดกลุ่มแถวที่มี Number เหมือนกันCOUNT(*)นับจำนวนแถวในแต่ละกลุ่ม- ค่า 10 ปรากฏ 3 ครั้ง, 20 ปรากฏ 2 ครั้ง, 30 ปรากฏ 1 ครั้ง
การประยุกต์: หาเฉพาะค่าที่ซ้ำ (Duplicate Values)
SELECT Number, COUNT(*) AS Count
FROM DemoTable
GROUP BY Number
HAVING COUNT(*) > 1;
ผลลัพธ์
+--------+-------+
| Number | Count |
+--------+-------+
| 20 | 2 |
| 10 | 3 |
+--------+-------+
การประยุกต์: หาค่าที่ไม่ซ้ำ (Unique Values)
SELECT Number, COUNT(*) AS Count
FROM DemoTable
GROUP BY Number
HAVING COUNT(*) = 1;
ผลลัพธ์
+--------+-------+
| Number | Count |
+--------+-------+
| 30 | 1 |
+--------+-------+
เพิ่มความชัดเจนด้วย Alias และ ORDER BY
SELECT Number, COUNT(*) AS Frequency
FROM DemoTable
GROUP BY Number
ORDER BY Frequency DESC, Number;