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

Lấy số lượng xuất hiện của một giá trị cụ thể trong cột MySQL?

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

Sử dụng COUNT(*) kết hợp với mệnh đề WHERE để đếm số bản ghi có giá trị cụ thể trong một cột.

Ví dụ minh họa

Tạo bảng DemoTable:

mysql> CREATE TABLE DemoTable (
    Id INT,
    Name VARCHAR(100)
);
Query OK, 0 rows affected (1.40 sec)

Chèn dữ liệu (có nhiều bản ghi trùng 'Chris'):

mysql> INSERT INTO DemoTable VALUES(100, 'John');
Query OK, 1 row affected (0.44 sec)
mysql> INSERT INTO DemoTable VALUES(101, 'Chris');
Query OK, 1 row affected (0.10 sec)
mysql> INSERT INTO DemoTable VALUES(102, 'Chris');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable VALUES(103, 'Chris');
Query OK, 1 row affected (1.05 sec)
mysql> INSERT INTO DemoTable VALUES(104, 'David');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable VALUES(105, 'Chris');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES(106, 'Carol');
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO DemoTable VALUES(107, 'Bob');
Query OK, 1 row affected (0.18 sec)

Xem tất cả bản ghi:

mysql> SELECT * FROM DemoTable;
+------+-------+
| Id   | Name  |
+------+-------+
| 100  | John  |
| 101  | Chris |
| 102  | Chris |
| 103  | Chris |
| 104  | David |
| 105  | Chris |
| 106  | Carol |
| 107  | Bob   |
+------+-------+
8 rows in set (0.00 sec)

Đếm số lần xuất hiện của 'Chris':

mysql> SELECT COUNT(*) FROM DemoTable WHERE Name = 'Chris';

Kết quả:

+----------+
| count(*) |
+----------+
| 4        |
+----------+
1 row in set (0.00 sec)

Mở rộng: Đếm tất cả giá trị cùng lúc (Phân phối tần suất)

SELECT Name, COUNT(*) AS Frequency
FROM DemoTable
GROUP BY Name
ORDER BY Frequency DESC;
+-------+-----------+
| Name  | Frequency |
+-------+-----------+
| Chris | 4         |
| John  | 1         |
| David | 1         |
| Carol | 1         |
| Bob   | 1         |
+-------+-----------+

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

Yêu cầuCú pháp
Đếm giá trị khác NULLCOUNT(ten_cot) (bỏ qua NULL)
Đếm giá trị duy nhấtCOUNT(DISTINCT ten_cot)
Đếm với nhiều điều kiệnSUM(CASE WHEN Name='Chris' THEN 1 ELSE 0 END)
Đếm % tỷ lệCOUNT(*) * 100.0 / (SELECT COUNT(*) FROM DemoTable)

Lưu ý hiệu suất

  • Tạo INDEX cho cột thường xuyên lọc (Name) để tăng tốc COUNT
  • Với bảng lớn, cân nhắc COUNT(*) vs COUNT(1) (tương đương trong MySQL)
  • Tránh COUNT(DISTINCT ...) trên cột không có index nếu bảng lớn