Working with Conditional Expressions

1. Using CASE Expression

SELECT id,
       CASE WHEN total_cents >= 10000 THEN 'large'
            WHEN total_cents >= 1000  THEN 'medium'
            ELSE 'small' END AS bucket
  FROM orders;
FormSyntax
SearchedCASE WHEN cond THEN ... END
SimpleCASE x WHEN 1 THEN 'a' ELSE 'b' END

2. Using Simple CASE Expression

SELECT id,
       CASE status WHEN 'new' THEN 0
                   WHEN 'paid' THEN 1
                   WHEN 'shipped' THEN 2
                   ELSE -1 END AS status_code
  FROM orders;

3. Using CASE in SELECT Clause

SELECT count(*) FILTER (WHERE status='paid') AS paid_count,
       sum(CASE WHEN status='paid' THEN total_cents ELSE 0 END) AS paid_revenue
  FROM orders;

4. Using CASE in WHERE Clause

SELECT * FROM orders
WHERE CASE WHEN :role = 'admin' THEN true
           ELSE customer_id = :uid END;

5. Using CASE in ORDER BY

SELECT * FROM orders
ORDER BY CASE status WHEN 'new' THEN 1 WHEN 'paid' THEN 2 ELSE 3 END,
         placed_at DESC;

6. Using COALESCE Function

SELECT id, COALESCE(nickname, full_name, 'Anonymous') AS display_name FROM users;
PropertyDetail
ReturnsFirst non-NULL argument
Short-circuitYes

7. Using NULLIF Function

SELECT a / NULLIF(b, 0) FROM ratios;     -- avoids divide-by-zero
Note: NULLIF(x, y) returns NULL if x = y, else x.

8. Using GREATEST Function

SELECT GREATEST(a, b, c) FROM nums;
-- NULL inputs are ignored

9. Using LEAST Function

SELECT LEAST(price, list_price, sale_price) AS min_price FROM products;

10. Using Boolean Expressions

ExprResult Type
a AND bboolean (three-valued)
a OR bboolean
NOT aboolean
a BETWEEN x AND yboolean

11. Using IS TRUE, IS FALSE, IS UNKNOWN

SELECT * FROM flags WHERE active IS TRUE;        -- excludes NULL
SELECT * FROM flags WHERE active IS NOT TRUE;    -- false or NULL
SELECT * FROM flags WHERE complete IS UNKNOWN;   -- NULL only
Note: Boolean predicate IS NULLIS UNKNOWN; these forms return strict booleans (never NULL) suitable for indexes.