SQL Practice Logo

SQLPractice Online

Conditional Aggregation with CASE & FILTER: Mistakes

Module: Aggregate Functions & Grouping

SELECT department, SUM(CASE WHEN status = 'active' THEN 1 END) AS active_count FROM employees GROUP BY department;

SELECT department, SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count FROM employees GROUP BY department;

Without ELSE 0, CASE returns NULL for non-matching rows. SUM of NULL returns NULL, not 0.

Always include ELSE 0 in conditional SUM expressions

High

Missing ELSE 0 causes NULL results

-- Multiple separate queries

SELECT department, COUNT(*) FROM employees WHERE status = 'active' GROUP BY department;

SELECT department, COUNT(*) FROM employees WHERE status = 'inactive' GROUP BY department;

SELECT department, SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active, SUM(CASE WHEN status = 'inactive' THEN 1 ELSE 0 END) AS inactive FROM employees GROUP BY department;

Conditional aggregation provides complete picture in single efficient query.

Use conditional aggregation instead of multiple queries

High

Multiple queries slower and risk inconsistency