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

Cách gộp truy vấn thành một truy vấn MySQL để đếm giá trị khác nhau ở các cột khác nhau

Cách gộp truy vấn thành một truy vấn MySQL để đếm giá trị khác nhau ở các cột khác nhau

Hãy tạo một bảng trước:

mysql> create table DemoTable760 (
    ClientId int,
    ClientId2 int
);
Query OK, 0 rows affected (0.79 sec)

Chèn một số bản ghi vào bảng bằng lệnh insert:

mysql> insert into DemoTable760 values(100,200);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable760 values(100,200);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable760 values(300,400);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable760 values(300,400);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable760 values(100,200);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable760 values(100,200);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable760 values(400,500);
Query OK, 1 row affected (0.08 sec)

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select:

mysql> select * from DemoTable760;

Điều này sẽ tạo ra đầu ra sau:

+----------+-----------+
| ClientId | ClientId2 |
+----------+-----------+
| 100      | 200       |
| 100      | 200       |
| 300      | 400       |
| 300      | 400       |
| 100      | 200       |
| 100      | 200       |
| 400      | 500       |
+----------+-----------+
7 rows in set (0.00 sec)

Truy vấn sau gộp các truy vấn thành một truy vấn để lấy số lượng các giá trị khác nhau ở các cột khác nhau:

mysql> select sum(ClientId=100) AS ClientId1, sum(ClientId2=200) AS ClientId2 from DemoTable760;

Điều này sẽ tạo ra đầu ra sau:

+-----------+-----------+
| ClientId1 | ClientId2 |
+-----------+-----------+
| 4         | 4         |
+-----------+-----------+
1 row in set (0.00 sec)

Giải thích: Trong MySQL, biểu thức logic ClientId=100 trả về 1 (true) hoặc 0 (false). SUM() cộng dồn các giá trị 1/0 này, cho ra số lượng hàng thỏa mãn điều kiện. Cách này cho phép đếm nhiều điều kiện khác nhau trên các cột khác nhau trong một lần quét bảng.