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

Đếm số lượng theo giá trị cụ thể trong MySQL (COUNT với điều kiện)

Sử dụng COUNT() kết hợp IF() hoặc CASE WHEN để đếm số hàng thỏa mãn điều kiện cụ thể.

Cú pháp

SELECT 
    COUNT(*) AS Tổng_số_hàng,
    COUNT(IF(cột = giá_trị, 1, NULL)) AS Số_lượng_giá_trị
FROM tên_bảng;

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE countValueDemo (
    -> ShippingDatetime DATETIME,
    -> FirstValue INT,
    -> SecondValue INT
    -> );
Query OK, 0 rows affected (1.35 sec)

Chèn dữ liệu (có giá trị NULL):

mysql> INSERT INTO countValueDemo VALUES
    -> ('2019-01-23', 1, 2),
    -> ('2017-02-21', NULL, 2),
    -> ('2016-04-12', 1, NULL);

Xem dữ liệu:

mysql> SELECT * FROM countValueDemo;
+---------------------+------------+-------------+
| ShippingDatetime    | FirstValue | SecondValue |
+---------------------+------------+-------------+
| 2019-01-23 00:00:00 | 1          | 2           |
| 2017-02-21 00:00:00 | NULL       | 2           |
| 2016-04-12 00:00:00 | 1          | NULL        |
+---------------------+------------+-------------+

Đếm: tổng hàng, số hàng FirstValue=1, số hàng SecondValue=2:

mysql> SELECT 
    -> ShippingDatetime,
    -> COUNT(*),
    -> COUNT(IF(FirstValue = 1, 1, NULL)),
    -> COUNT(IF(SecondValue = 2, 1, NULL))
    -> FROM countValueDemo;
+---------------------+----------+----------------------------------------+-----------------------------------------+
| ShippingDatetime    | COUNT(*) | COUNT(IF(FirstValue = 1, 1, NULL))     | COUNT(IF(SecondValue = 2, 1, NULL))     |
+---------------------+----------+----------------------------------------+-----------------------------------------+
| 2019-01-23 00:00:00 | 3        | 2                                      | 2                                       |
+---------------------+----------+----------------------------------------+-----------------------------------------+

Giải thích

  • COUNT(*): đếm tất cả hàng (3 hàng)
  • COUNT(IF(FirstValue = 1, 1, NULL)): IF trả về 1 khi đúng, NULL khi sai. COUNT chỉ đếm giá trị KHÔNG NULL → kết quả 2
  • Tương tự cho SecondValue = 2 → kết quả 2

Cách viết hiện đại hơn (MySQL 8.0+)

SELECT 
    COUNT(*) AS total,
    COUNT(CASE WHEN FirstValue = 1 THEN 1 END) AS first_eq_1,
    COUNT(CASE WHEN SecondValue = 2 THEN 1 END) AS second_eq_2
FROM countValueDemo;

Đếm nhiều giá trị khác nhau cùng lúc

SELECT 
    FirstValue,
    COUNT(*) AS cnt
FROM countValueDemo
GROUP BY FirstValue;
+------------+-----+
| FirstValue | cnt |
+------------+-----+
| NULL       | 1   |
| 1          | 2   |
+------------+-----+