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

นับจำนวนค่าซ้ำในคอลัมน์ MySQL ด้วย COUNT และ GROUP BY

ใช้ 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 เพื่อกรองเฉพาะค่าที่ซ้ำ