In SQL, conditional logic is essential for performing complex data manipulation and calculations. The CASE statement in SQL provides a way to implement if-then-else logic directly within your queries. It allows you to create conditional statements that return different values based on certain conditions, making your SQL queries more flexible and dynamic.
The SQL CASE statement evaluates a set of conditions and returns a value when a condition is met. It's similar to an if-else statement in programming languages, providing a way to execute different logic based on specific criteria.
There are two types of CASE statements in SQL:
The simple CASE expression compares an expression to a set of values and returns a result for the first match it finds.
SELECT column1,
column2,
CASE column1
WHEN value1 THEN 'Result1'
WHEN value2 THEN 'Result2'
ELSE 'DefaultResult'
END AS result_column
FROM table_name;
The searched CASE expression evaluates multiple conditions and returns a result based on the first true condition.
SELECT column1,
column2,
CASE
WHEN condition1 THEN 'Result1'
WHEN condition2 THEN 'Result2'
ELSE 'DefaultResult'
END AS result_column
FROM table_name;
column1 > 100
, column2 = 'A'
).Let's say you have a sales
table with columns employee_id
, sales_amount
, and commission_rate
. You want to create a query that classifies employees into different commission tiers based on their sales amount.
SELECT employee_id,
sales_amount,
CASE sales_amount
WHEN sales_amount >= 10000 THEN 'Tier 1'
WHEN sales_amount >= 5000 THEN 'Tier 2'
ELSE 'Tier 3'
END AS commission_tier
FROM sales;
Explanation:
sales_amount
is evaluated.Now, let’s use the searched CASE expression to create a query that categorizes employees based on both their sales_amount
and commission_rate
.
SELECT employee_id,
sales_amount,
commission_rate,
CASE
WHEN sales_amount >= 10000 AND commission_rate > 0.1 THEN 'High Performer'
WHEN sales_amount >= 5000 AND commission_rate > 0.05 THEN 'Average Performer'
ELSE 'Low Performer'
END AS performance_category
FROM sales;
Explanation:
sales_amount
and commission_rate
to assign a performance category.You can also use the CASE statement in the ORDER BY
clause to conditionally sort your query results. Let’s say you want to sort employees by performance category dynamically.
SELECT employee_id,
sales_amount,
commission_rate,
CASE
WHEN sales_amount >= 10000 AND commission_rate > 0.1 THEN 'High Performer'
WHEN sales_amount >= 5000 AND commission_rate > 0.05 THEN 'Average Performer'
ELSE 'Low Performer'
END AS performance_category
FROM sales
ORDER BY
CASE
WHEN sales_amount >= 10000 AND commission_rate > 0.1 THEN 1
WHEN sales_amount >= 5000 AND commission_rate > 0.05 THEN 2
ELSE 3
END;
Explanation:
CASE
statement assigns a numeric value based on performance.The CASE statement can also handle NULL
values. For example, you can use CASE to replace NULL
with a default value in your result set.
SELECT employee_id,
sales_amount,
commission_rate,
CASE
WHEN commission_rate IS NULL THEN 'No Commission'
WHEN commission_rate > 0.1 THEN 'High Commission'
ELSE 'Standard Commission'
END AS commission_status
FROM sales;
Explanation:
commission_rate
is NULL
, it is labeled as "No Commission".