SELECT id, CASE WHEN total_cents >= 10000 THEN 'large' WHEN total_cents >= 1000 THEN 'medium' ELSE 'small' END AS bucket FROM orders;
Form
Syntax
Searched
CASE WHEN cond THEN ... END
Simple
CASE 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 ordersWHERE CASE WHEN :role = 'admin' THEN true ELSE customer_id = :uid END;
5. Using CASE in ORDER BY
SELECT * FROM ordersORDER 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;
Property
Detail
Returns
First non-NULL argument
Short-circuit
Yes
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
Expr
Result Type
a AND b
boolean (three-valued)
a OR b
boolean
NOT a
boolean
a BETWEEN x AND y
boolean
11. Using IS TRUE, IS FALSE, IS UNKNOWN
SELECT * FROM flags WHERE active IS TRUE; -- excludes NULLSELECT * FROM flags WHERE active IS NOT TRUE; -- false or NULLSELECT * FROM flags WHERE complete IS UNKNOWN; -- NULL only
Note: Boolean predicate IS NULL ≡ IS UNKNOWN; these forms return strict booleans (never NULL) suitable for indexes.