Menu
CoddyTech

SUM 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 13 trên 27.

Ý tưởng tương tự cũng áp dụng với SUM, và cách này còn linh hoạt hơn. CASE có thể trả về 1 cho các hàng khớp điều kiện và 0 cho mọi hàng khác, hoặc trả về bất kỳ giá trị số nào để tính trọng số khác nhau cho các hàng.

SELECT
    SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
    SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM users

SUM(CASE … THEN 1 ELSE 0 END) và COUNT(CASE … THEN 1 END) cho cùng kết quả khi đếm; hãy chọn cách viết mà nhóm bạn ưa thích.

challenge icon

Thử thách

Dễ

Các bảng và cột hiện có:

  • transactions: id, category, type, amount

type là 'sale' hoặc 'refund'. Với mỗi category, hãy trả về:

  • category
  • net_revenue: tổng số tiền bán hàng trừ tổng số tiền hoàn lại

Tính net_revenue bằng một biểu thức SUM(CASE …)</code duy nhất, trong đó số tiền hoàn lại được tính là số âm. Sắp xếp theo <code>net_revenue theo thứ tự giảm dần.

Tự làm thử

SELECT category,
       -- Một SUM(CASE ...) trong đó các khoản hoàn tiền được tính là số âm
FROM transactions
GROUP BY category
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