Đôi khi bạn có thể cần phải chọn nhiều số trong một truy vấn, nhận nhiều số cho các điều kiện khác nhau hoặc chọn nhiều số với các tiêu chí khác nhau. Trong bài viết này, chúng ta sẽ xem xét cách lấy nhiều số với một truy vấn duy nhất trong MySQL.
Cách nhận nhiều số lượng với một truy vấn trong MySQL
Giả sử bạn có bảng sau product_sales (id, product, order_date, amount)
mysql> create table product_sales( id int, product varchar(10), order_date date, amount int ); mysql> insert into product_sales(id, product, order_date, amount) values(1, 'A', '2021-01-01', 250), (2, 'B', '2021-01-02', 200), (3, 'A', '2021-01-03', 150), (4, 'B', '2021-01-04', 250); mysql> select * from product_sales; +------+---------+------------+--------+ | id | product | order_date | amount | +------+---------+------------+--------+ | 1 | A | 2021-01-01 | 250 | | 2 | B | 2021-01-02 | 200 | | 3 | A | 2021-01-03 | 150 | | 4 | B | 2021-01-04 | 250 | +------+---------+------------+--------+
Giả sử bạn muốn tổng số, tổng số đơn đặt hàng của sản phẩm A và số đơn đặt hàng của sản phẩm B trong một truy vấn.
Đây là truy vấn SQL để thực hiện điều trên.
mysql> select count(*) as total_count, count(if(product='A',1,null)) as A_count, count(if(product='B',1,null)) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
Hãy để chúng tôi xem xét chi tiết truy vấn trên.
số lượng (*) đếm tất cả các hàng trong bảng để đưa ra tổng số.
count (if (product =’A’, 1, null)) là A_count - khi chúng ta sử dụng điều kiện IF bên trong hàm đếm, nó sẽ chỉ đếm các hàng có điều kiện là đúng. Điều kiện của chúng tôi là đối sánh các hàng có product =A. Vì vậy, MySQL, chỉ tính những hàng có product là A. Nếu không, nó không được tính (được gán là NULL).
Xin lưu ý, điều quan trọng là sử dụng null trong trường hợp điều kiện IF không thành công thì thậm chí các hàng không khớp cũng được tính.
Tương tự, chúng tôi tính số lượng cho các hàng có product =B
Bạn cũng có thể nhận được kết quả trên bằng cách sử dụng câu lệnh CASE như được hiển thị bên dưới.
mysql> select count(*) as total_count, count(case when product='A' then 1 else null end) as A_count, count(case when product='B' then 1 else null end) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!