The CASE statement is one of the most powerful and flexible tools in SQL. It allows conditional logic anywhere in your query—SELECT, WHERE, GROUP BY, ORDER BY, and especially within aggregations.
✅ General Syntax of CASE
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
🔍 Use Cases of CASE in Different Clauses
✅ 1. In SELECT — Conditional column values
SELECT name,
salary,
CASE
WHEN salary > 100000 THEN 'High'
WHEN salary > 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_band
FROM employees;
📌 Labeling or categorizing data based on conditions.
✅ 2. In WHERE — Conditional filtering (less common)
SELECT *
FROM orders
WHERE
CASE
WHEN status = 'pending' THEN amount > 100
ELSE TRUE
END;
📌 Used sparingly, but can apply complex filters dynamically.
✅ 3. In ORDER BY — Conditional sort logic
SELECT name, status
FROM tasks
ORDER BY
CASE
WHEN status = 'urgent' THEN 1
WHEN status = 'high' THEN 2
ELSE 3
END;
📌 Custom ordering of categorical values.
✅ 4. In Aggregation — Conditional counting or summing
a. Count by condition:
SELECT
department,
COUNT(*) AS total_employees,
COUNT(CASE WHEN gender = 'Male' THEN 1 END) AS male_count,
COUNT(CASE WHEN gender = 'Female' THEN 1 END) AS female_count
FROM employees
GROUP BY department;
b. Sum conditionally:
SELECT
department,
SUM(CASE WHEN salary > 50000 THEN salary ELSE 0 END) AS high_earner_total
FROM employees
GROUP BY department;
c. Multiple category aggregation:
SELECT
product_type,
SUM(CASE WHEN status = 'delivered' THEN 1 ELSE 0 END) AS delivered_count,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled_count
FROM orders
GROUP BY product_type;
✅ 5. In GROUP BY — Grouping based on a derived value
SELECT
CASE
WHEN age < 18 THEN 'Minor'
WHEN age BETWEEN 18 AND 60 THEN 'Adult'
ELSE 'Senior'
END AS age_group,
COUNT(*)
FROM users
GROUP BY
CASE
WHEN age < 18 THEN 'Minor'
WHEN age BETWEEN 18 AND 60 THEN 'Adult'
ELSE 'Senior'
END;
📌 You must repeat the CASE in GROUP BY unless you use a subquery or CTE.
✅ 6. Nested CASE
SELECT name,
CASE
WHEN country = 'India' THEN
CASE
WHEN city = 'Delhi' THEN 'North'
WHEN city = 'Mumbai' THEN 'West'
ELSE 'Other'
END
ELSE 'International'
END AS region
FROM users;
📌 Useful for multi-layered logic.
🧠 Summary Table
| Location | Example Use Case |
|---|---|
SELECT | Categorize values, label based on logic |
WHERE | Conditional filters |
ORDER BY | Custom sort order |
GROUP BY | Group by derived buckets (like age, band) |
| Aggregation | Conditional SUM, COUNT, AVG etc. |
Leave a Reply