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

Đếm số lượt vote dương và âm trong MySQL?

Sử dụng CASE kết hợp với hàm tổng hợp SUM() để đếm số lượng giá trị dương và âm trong một cột.

Tạo bảng vote

mysql> CREATE TABLE DemoTable (
    -> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Vote INT
    -> );

Chèn dữ liệu (giá trị dương = vote up, âm = vote down)

mysql> INSERT INTO DemoTable(Vote) VALUES(-10);
mysql> INSERT INTO DemoTable(Vote) VALUES(100);
mysql> INSERT INTO DemoTable(Vote) VALUES(45);
mysql> INSERT INTO DemoTable(Vote) VALUES(-6);
mysql> INSERT INTO DemoTable(Vote) VALUES(-1000);
mysql> INSERT INTO DemoTable(Vote) VALUES(450);

Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+----+-------+
| Id | Vote  |
+----+-------+
| 1  | -10   |
| 2  | 100   |
| 3  | 45    |
| 4  | -6    |
| 5  | -1000 |
| 6  | 450   |
+----+-------+

Đếm vote dương và âm

mysql> SELECT 
    -> SUM(CASE WHEN Vote > 0 THEN 1 ELSE 0 END) AS Number_Of_Positive_Votes,
    -> SUM(CASE WHEN Vote < 0 THEN 1 ELSE 0 END) AS Number_Of_Negative_Votes
    -> FROM DemoTable;
+--------------------------+--------------------------+
| Number_Of_Positive_Votes | Number_Of_Negative_Votes |
+--------------------------+--------------------------+
| 3                        | 3                        |
+--------------------------+--------------------------+

Mở rộng: Tính tổng điểm vote

SELECT 
    SUM(CASE WHEN Vote > 0 THEN Vote ELSE 0 END) AS Total_Positive_Score,
    SUM(CASE WHEN Vote < 0 THEN Vote ELSE 0 END) AS Total_Negative_Score,
    SUM(Vote) AS Net_Score
FROM DemoTable;

Cách viết gọn với COUNT()

SELECT 
    COUNT(CASE WHEN Vote > 0 THEN 1 END) AS Positive_Count,
    COUNT(CASE WHEN Vote < 0 THEN 1 END) AS Negative_Count
FROM DemoTable;

COUNT chỉ đếm giá trị không NULL, nên CASE WHEN ... THEN 1 END (mặc định ELSE NULL) hoạt động tương tự.