ใช้ COUNT(*) ร่วมกับ GROUP BY เพื่อนับจำนวนครั้งที่ค่าแต่ละค่าปรากฏในคอลัมน์
Syntax
SELECT column_name, COUNT(*) as count FROM table_name GROUP BY column_name;
ตัวอย่างการใช้งาน
1. สร้างตารางและเพิ่มข้อมูล (มีค่าซ้ำ)
mysql> create table DemoTable1818 ( Id int, Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) mysql> insert into DemoTable1818 values(10,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1818 values(11,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1818 values(11,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1818 values(12,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1818 values(10,'Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1818 values(10,'Chris'); Query OK, 1 row affected (0.00 sec)
ข้อมูลทั้งหมด:
mysql> select * from DemoTable1818;
+------+-------+ | Id | Name | +------+-------+ | 10 | Chris | | 11 | Chris | | 11 | Chris | | 12 | Chris | | 10 | Chris | | 10 | Chris | +------+-------+ 6 rows in set (0.00 sec)
2. นับจำนวนแต่ละ Id
mysql> select Id, count(*) as TotalPerId from DemoTable1818 group by Id;
ผลลัพธ์:
+------+------------+ | Id | TotalPerId | +------+------------+ | 10 | 3 | | 11 | 2 | | 12 | 1 | +------+------------+ 3 rows in set (0.00 sec)
การประยุกต์ใช้เพิ่มเติม
นับเฉพาะค่าที่ซ้ำ (มีมากกว่า 1)
SELECT Id, COUNT(*) as cnt FROM DemoTable1818 GROUP BY Id HAVING COUNT(*) > 1;
+------+-----+ | Id | cnt | +------+-----+ | 10 | 3 | | 11 | 2 | +------+-----+
นับค่าที่ไม่ซ้ำ (Distinct)
SELECT COUNT(DISTINCT Id) FROM DemoTable1818; -- ผลลัพธ์: 3
เรียงลำดับตามจำนวนมากไปน้อย
SELECT Id, COUNT(*) as cnt FROM DemoTable1818 GROUP BY Id ORDER BY cnt DESC;
COUNT(*) vs COUNT(column) vs COUNT(DISTINCT column)
| Syntax | นับอะไร | NULL |
|---|---|---|
| COUNT(*) | จำนวนแถวทั้งหมด | นับรวม NULL |
| COUNT(col) | จำนวนค่า NOT NULL ในคอลัมน์ | ไม่นับ NULL |
| COUNT(DISTINCT col) | จำนวนค่าที่ไม่ซ้ำกัน (NOT NULL) | ไม่นับ NULL |
สรุป: ใช้ GROUP BY column_name ร่วม COUNT(*) เพื่อนับความถี่ของแต่ละค่า เพิ่ม HAVING COUNT(*) > 1 เพื่อกรองเฉพาะค่าที่ซ้ำ