Articles

How to Use the CASE Statement in SQL (With Examples)

Published Mar 26, 2025Updated Apr 7, 2025
Learn how to use the SQL `CASE` statement to implement conditional logic efficiently. Explore its syntax, use cases, best practices, and performance considerations.

What is the CASE statement in SQL?

We often need to implement conditional logic for data transformation and classification within SQL queries. In such cases, the SQL CASE statement serves as a versatile and powerful tool for implementing if-then-else logic directly within queries. It allows different output values based on specified conditions, making queries more flexible and readable.

Consider a scenario where a company wants to classify employees based on their performance ratings stored in a database. A straightforward but inefficient approach would be to write separate queries for each classification like this:

SELECT employee_name, 'Outstanding' AS performance_category
FROM employees WHERE rating > 90;
SELECT employee_name, 'Exceeds Expectations' AS performance_category
FROM employees WHERE rating BETWEEN 70 AND 90;
SELECT employee_name, 'Needs Improvement' AS performance_category
FROM employees WHERE rating < 70;

While this method works, it requires multiple queries, making maintenance and execution of the SQL queries challenging. The CASE statement in SQL simplifies this by enabling dynamic classification within a single query, improving efficiency and readability.

Now, let’s break down the syntax of the CASE statement and explore how it works.

Related Course

Analyze Data with SQL

Learn to analyze data with SQL and prepare for technical interviews.Try it for free

Syntax of the CASE statement

The CASE statement in SQL follows a straightforward structure that resembles conditional statements in programming languages.

It can be implemented in two ways, depending on how conditions are evaluated:

Simple CASE

The simple CASE syntax compares an expression to a set of simple expressions sequentially and returns the result of the first match. If no match is found, it returns the value specified in the ELSE clause (or NULL if ELSE is omitted).

CASE expression 
    WHEN value1 THEN result1 
    WHEN value2 THEN result2 
    ... 
    ELSE default_result 
END 
  • expression: The value or column being evaluated (optional in some cases).
  • WHEN condition: Specifies a condition to check.
  • THEN result: Defines the output if the condition is met.
  • ELSE result: Provides a default result if no conditions match.
  • END: Marks the end of the CASE statement.

Searched CASE

The searched CASE statement evaluates multiple Boolean expressions and returns the result of the first condition that evaluates to TRUE. If none of the conditions match, it returns the value specified in the ELSE clause (or NULL if ELSE is omitted).

CASE 
    WHEN condition1 THEN result1 
    WHEN condition2 THEN result2 
    ... 
    ELSE default_result 
END 
  • WHEN condition: Each WHEN clause evaluates a Boolean expression.
  • THEN result: Defines the output if the condition is met.
  • ELSE result: Specifies a default result when no conditions match.
  • END: Marks the end of the CASE statement.

With the syntax covered, let’s explore how to use the CASE statement within SELECT and other key SQL clauses.

Using CASE within SELECT statements

The CASE statement is frequently used within SELECT queries to modify output dynamically. It helps in scenarios like conditional aggregation, custom sorting, and row-level transformations.

Let’s say we have an employees table like this:

employee_id employee_name rating
1 Alice 95
2 Bob 85
3 Charlie 70
4 David 60
5 Emma NULL

Now, to classify employees based on their performance ratings stored in the database in a single SQL query, the SELECT statement would look like this:

SELECT
employee_name,
CASE
WHEN rating > 90 THEN 'Outstanding'
WHEN rating BETWEEN 70 AND 90 THEN 'Exceeds Expectations'
WHEN rating < 70 THEN 'Needs Improvement'
ELSE 'Unrated'
END AS performance_category
FROM
employees;

The output will be:

employee_name performance_category
Alice Outstanding
Bob Exceeds Expectations
Charlie Exceeds Expectations
David Needs Improvement
Emma Unrated

Now that the basic usage of CASE with the SELECT statement in SQL is clear, let’s explore its application in other SQL statements.

CASE in WHERE, ORDER BY, and GROUP BY clauses

The CASE statement can also be used in different SQL clauses to add flexibility and control over query execution:

  • WHERE: Filters data based on conditional logic.
  • ORDER BY: Dynamically sorts data based on custom conditions.
  • GROUP BY: Categorizes records for aggregation.

Next, let’s explore these use cases with examples using an employees table as a reference:

Suppose the employees table is like this:

employee_id employee_name department salary years_experience total_purchases
1 Alice Engineering 90000 1 120
2 Bob Marketing 50000 3 80
3 Charlie Engineering 75000 6 40
4 David Marketing 65000 5 150
5 Eve HR 70000 8 20

Using CASE in WHERE (conditional filtering)

Let’s say we have to retrieve employees earning above department-specific salary thresholds:

  • Engineering: Above $80,000
  • Marketing: Above $60,000
  • HR: No condition

Standard WHERE clauses apply the same condition across all rows, but CASE allows dynamic filtering based on column values. Here, different departments have different salary thresholds, which a simple WHERE cannot handle efficiently.

The SQL query combining CASE and WHERE will be as follows:

SELECT employee_name, department, salary
FROM employees
WHERE
CASE
WHEN department = 'Engineering' AND salary > 80000 THEN TRUE
WHEN department = 'Marketing' AND salary > 60000 THEN TRUE
WHEN department = 'HR' THEN TRUE
ELSE FALSE
END;

The output will be:

employee_name department salary
Alice Engineering 90000
David Marketing 65000
Eve HR 70000

Using CASE in ORDER BY (custom sorting)

Let’s say we have to sort employees by their total purchases, giving higher priority to:

  • Frequent buyers (purchases > 100)
  • Moderate buyers (50-100 purchases)
  • Other buyers (remaining employees)

Sorting typically follows a fixed column order (e.g., by salary or date). CASE allows dynamic sorting based on categories, such as prioritizing high-value customers over low-value ones. Here, employees are sorted by purchase behavior, ensuring frequent buyers appear first.

The SQL query combining CASE and ORDER BY will be as follows:

SELECT employee_name, total_purchases
FROM employees
ORDER BY
CASE
WHEN total_purchases > 100 THEN 1
WHEN total_purchases BETWEEN 50 AND 100 THEN 2
ELSE 3
END, total_purchases DESC;

The output will be:

employee_name total_purchases
David 150
Alice 120
Bob 80
Charlie 40
Eve 20

Using CASE in GROUP BY (dynamic categorization)

Suppose we need to categorize employees based on experience levels and count how many employees fall into each category.

  • Beginner: Less than 2 years
  • Intermediate: 2–5 years
  • Expert: More than 5 years

GROUP BY normally aggregates data by fixed column values. CASE enables dynamic grouping by custom categories, such as grouping employees based on experience levels rather than exact years.

The SQL query combining CASE and GROUP BY will be as follows:

SELECT
CASE
WHEN years_experience < 2 THEN 'Beginner'
WHEN years_experience BETWEEN 2 AND 5 THEN 'Intermediate'
ELSE 'Expert'
END AS experience_category,
COUNT(*) AS employee_count
FROM employees
GROUP BY
CASE
WHEN years_experience < 2 THEN 'Beginner'
WHEN years_experience BETWEEN 2 AND 5 THEN 'Intermediate'
ELSE 'Expert'
END;

The output will be:

experience_category employee_count
Beginner 1
Intermediate 2
Expert 2

The CASE statement is a powerful tool for conditional logic in SQL, but improper use can slow down queries, especially in large datasets. In the next section, let’s explore optimizing its usage to ensure better performance, readability, and maintainability.

Performance considerations and best practices

When using CASE statements in our SQL queries, we should keep these performance considerations and best practices in mind:

  • Indexing Impact:

    • When used in a WHERE clause, CASE can prevent indexes from being utilized, leading to full table scans.
    • To maintain performance, filter indexed columns before applying CASE logic.
  • Performance in ORDER BY and GROUP BY:

    • In ORDER BY, CASE can dynamically sort results, but it forces row-by-row evaluation, slowing execution.
    • Using indexes on frequently sorted columns or precomputing sortable categories improves efficiency.
    • In GROUP BY, excessive use of CASE can make queries less maintainable and slower; consider using precomputed classifications.
  • Readability and Maintainability:

    • Avoid deeply nested CASE statements, which reduce clarity and make debugging difficult.
    • Use proper indentation and comments for complex conditions.
    • Consider precomputing categorized fields in temporary tables or views.

Understanding the impact of CASE statements on query performance is crucial for writing efficient and maintainable SQL queries. By optimizing their use, queries can run faster and remain scalable as datasets grow.

With these best practices in mind, let’s explore real-world applications of CASE to see how it enhances data analysis and decision-making in SQL.

Real-world applications of CASE

Some key real-world applications of CASE in SQL include:

  • Reporting Queries: The CASE statement is widely used in reporting dashboards to classify data dynamically. For example, customer demographics can be grouped into predefined categories based on age, spending habits, or subscription tiers, making reports more insightful and actionable.

  • Financial Calculations: In financial applications, CASE helps implement tiered pricing models, tax brackets, or discount structures. Instead of writing multiple queries or complex joins, CASE allows financial institutions to apply conditional logic within a single SQL statement, ensuring accuracy and efficiency.

  • E-Commerce Analytics: E-commerce platforms often use CASE in analytics queries to segment users based on their purchase history, engagement level, or preferences. Businesses can optimize marketing strategies, personalize recommendations, and improve customer retention by prioritizing high-value customers or identifying inactive users.

By efficiently leveraging the CASE statement, organizations can streamline data processing, enhance decision-making, and improve query performance across various domains.

Conclusion

The SQL CASE statement is a powerful feature that brings conditional logic into SQL queries, enabling dynamic classification, filtering, sorting, and aggregation. By integrating CASE statement in SQL, complex data transformations can be handled within a single query, improving efficiency and readability.

Choosing between simple CASE and searched CASE, strategically using CASE in WHERE, ORDER BY, and GROUP BY clauses, and following best practices are key to writing optimized SQL queries. While CASE can introduce overhead if not used carefully, proper indexing and query structuring help maintain performance.

Mastering CASE in SQL allows developers and analysts to write more adaptable SQL queries, making data analysis more insightful and efficient across various industries, from financial modeling to customer analytics.

To explore more SQL concepts, check out the Learn SQL course by Codecademy.

Codecademy Team

'The Codecademy Team, composed of experienced educators and tech experts, is dedicated to making tech skills accessible to all. We empower learners worldwide with expert-reviewed content that develops and enhances the technical skills needed to advance and succeed in their careers.'

Meet the full team