Menu
CoddyTech

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 users

Giờ đâ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.

challenge icon

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_id
  • total: tổng số đơn hàng khách hàng đó đã đặt
  • shipped: 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
quiz iconTự kiểm tra

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

Tự luyện tập: Playground SQL