COUNT với CASE
Thuộc phần Vượt ra ngoài kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 12 trên 27.
Bạn có thể đặt biểu thức CASE bên trong một hàm tổng hợp. Mẹo là COUNT bỏ qua NULL, nên CASE không có ELSE chỉ đếm những hàng thỏa mãn điều kiện.
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersGiờ đây, active_count là số hàng có 'active', dù ta không lọc toàn bộ truy vấn. Đây là mẹo đằng sau mọi truy vấn bảng điều khiển nhiều chỉ số mà bạn sẽ viết.
Thử thách
DễCác bảng và cột hiện có:
orders:id,customer_id,status
Với mỗi customer_id, trả về:
customer_idtotal: tổng số đơn hàng khách hàng đó đã đặtshipped: số đơn cóstatus = 'shipped'cancelled: số đơn cóstatus = 'cancelled'
Chỉ trả về những khách hàng có ít nhất một đơn hàng đã bị hủy. Sắp xếp theo customer_id.
Tự làm thử
SELECT customer_id,
COUNT(*) AS total,
-- đếm đơn đã giao và đơn đã hủy bằng COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- lọc khách hàng có ít nhất một đơn đã hủy
ORDER BY customer_id
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Vượt ra ngoài kiến thức cơ bản
6Công thức phân tích dữ liệu
Top N trong mỗi nhómTỷ lệ trên tổngTổng lũy kếGiữ lại một hàng cho mỗi khóaÔn tập: khách hàng hàng đầuTự luyện tập: Playground SQL