Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Đếm số lần xuất hiện giá trị trong cột MySQL


Cú pháp

Sử dụng hàm tổng hợp COUNT() kết hợp GROUP BY:

SELECT ten_cot, COUNT(*) AS so_lan 
FROM ten_bang 
GROUP BY ten_cot;

Ví dụ: Đếm số lần xuất hiện điểm số (Marks)

1. Tạo bảng

mysql> CREATE TABLE CountSameValue ( 
-> Id INT, 
-> Name VARCHAR(100), 
-> Marks INT 
-> ); 
Query OK, 0 rows affected (0.70 sec)

2. Chèn dữ liệu

mysql> INSERT INTO CountSameValue VALUES(1,'Sam',67); 
Query OK, 1 row affected (0.17 sec) 
mysql> INSERT INTO CountSameValue VALUES(2,'Mike',87); 
Query OK, 1 row affected (0.19 sec) 
mysql> INSERT INTO CountSameValue VALUES(3,'Carol',67); 
Query OK, 1 row affected (0.24 sec) 
mysql> INSERT INTO CountSameValue VALUES(4,'Bob',87); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO CountSameValue VALUES(5,'John',71); 
Query OK, 1 row affected (0.17 sec) 
mysql> INSERT INTO CountSameValue VALUES(6,'Adam',66); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO CountSameValue VALUES(7,'David',71); 
Query OK, 1 row affected (0.20 sec) 
mysql> INSERT INTO CountSameValue VALUES(8,'Maria',67); 
Query OK, 1 row affected (0.16 sec)

3. Dữ liệu gốc

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)

4. Đếm tần suất 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)

Các biến thể hữu ích

Sắp xếp theo tần suất giảm dần

SELECT ten_cot, COUNT(*) AS so_lan 
FROM ten_bang 
GROUP BY ten_cot 
ORDER BY so_lan DESC;

Chỉ lấy giá trị xuất hiện > N lần (HAVING)

SELECT ten_cot, COUNT(*) AS so_lan 
FROM ten_bang 
GROUP BY ten_cot 
HAVING COUNT(*) > 1;

Đếm trên nhiều cột (kết hợp)

SELECT cot_a, cot_b, COUNT(*) AS so_lan 
FROM ten_bang 
GROUP BY cot_a, cot_b;

Đếm distinct (loại bỏ trùng lặp trước khi đếm)

SELECT ten_cot, COUNT(DISTINCT cot_khac) AS so_luong_khac 
FROM ten_bang 
GROUP BY ten_cot;

Ứng dụng thực tế

  • Phân tích phân bố dữ liệu (data profiling)
  • Tìm giá trị phổ biến nhất (mode)
  • Phát hiện bất thường: Giá trị xuất hiện quá nhiều/ít
  • Báo cáo thống kê: Top 10 giá trị, phân phối

Lưu ý hiệu năng

  • Index trên cột GROUP BY tăng tốc đáng kể
  • Tránh GROUP BY trên cột TEXT/BLOB lớn
  • Sử dụng SQL_CALC_FOUND_ROWS nếu cần tổng số nhóm