Useful Data Tips

CASE WHEN Statements: Conditional Logic in SQL

⏱️ 32 sec read 📊 SQL

CASE WHEN is SQL's if-then-else logic. Use it to create calculated columns, categorize data, or handle conditional updates.

Basic Syntax

SELECT name, salary,
    CASE
        WHEN salary < 50000 THEN 'Junior'
        WHEN salary < 100000 THEN 'Mid-level'
        WHEN salary < 150000 THEN 'Senior'
        ELSE 'Executive'
    END as salary_tier
FROM employees;

Simple CASE vs Searched CASE

Simple CASE (equality checks only)

SELECT order_id,
    CASE status
        WHEN 'pending' THEN 'Order Received'
        WHEN 'processing' THEN 'Being Prepared'
        WHEN 'shipped' THEN 'On The Way'
        ELSE 'Delivered'
    END as status_message
FROM orders;

Searched CASE (complex conditions)

SELECT product_name, stock_quantity,
    CASE
        WHEN stock_quantity = 0 THEN 'Out of Stock'
        WHEN stock_quantity < 10 THEN 'Low Stock'
        WHEN stock_quantity < 50 THEN 'In Stock'
        ELSE 'Well Stocked'
    END as inventory_status
FROM products;

Practical Use Cases

Conditional Aggregation

SELECT department,
    COUNT(*) as total_employees,
    SUM(CASE WHEN salary > 80000 THEN 1 ELSE 0 END) as high_earners,
    AVG(CASE WHEN hire_date >= '2024-01-01' THEN salary END) as avg_new_hire_salary
FROM employees
GROUP BY department;

Pivot Data

SELECT customer_id,
    SUM(CASE WHEN product_category = 'Electronics' THEN amount ELSE 0 END) as electronics_total,
    SUM(CASE WHEN product_category = 'Clothing' THEN amount ELSE 0 END) as clothing_total,
    SUM(CASE WHEN product_category = 'Books' THEN amount ELSE 0 END) as books_total
FROM orders
GROUP BY customer_id;

Handle NULL Values

SELECT name,
    CASE
        WHEN phone IS NULL THEN email
        ELSE phone
    END as primary_contact
FROM customers;

Pro Tip: CASE expressions are evaluated top-to-bottom. Put the most common conditions first for better performance, and always include an ELSE clause to handle unexpected values.

← Back to SQL Tips