CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
[...]
[ELSE default_result]
END;
SELECT SUM(CASE department_id WHEN 10 THEN 1 ELSE 0 END) AS dept_10_count,
SUM(CASE department_id WHEN 20 THEN 1 ELSE 0 END) AS dept_20_count,
SUM(CASE department_id WHEN 30 THEN 1 ELSE 0 END) AS dept_30_count
FROM employees;
dept_10_count|dept_20_count|dept_30_count|
-------------|-------------|-------------|
1| 2| 6|
SELECT first_name,
last_name,
CASE department_id
WHEN 10 THEN 'Administration'
WHEN 20 THEN 20
WHEN 30 THEN 'Purchasing'
ELSE 'Others' END AS department_name
FROM employees;
SQL 错误 [22P02]: ERROR: invalid input syntax for integer: "Others"
Position: 183
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
[ELSE default_result]
END
SELECT SUM(CASE WHEN department_id = 10 THEN 1 ELSE 0 END) AS dept_10_count,
SUM(CASE WHEN department_id = 20 THEN 1 ELSE 0 END) AS dept_20_count,
SUM(CASE WHEN department_id = 30 THEN 1 ELSE 0 END) AS dept_30_count
FROM employees;
SELECT e.first_name,
e.last_name,
e.salary,
CASE
WHEN e.salary < 5000 THEN '低'
WHEN e.salary < 15000 THEN '中'
ELSE '高'
END AS salary_level
FROM employees e;
first_name |last_name |salary |salary_level|
-----------|-----------|--------|------------|
Steven |King |24000.00|高 |
Neena |Kochhar |17000.00|高 |
Lex |De Haan |17000.00|高 |
Nancy |Greenberg |12008.00|中 |
Daniel |Faviet | 9000.00|中 |
John |Chen | 8200.00|中 |
Ismael |Sciarra | 7700.00|中 |
Jose Manuel|Urman | 7800.00|中 |
Luis |Popp | 6900.00|中 |
Den |Raphaely |11000.00|中 |
Alexander |Khoo | 3100.00|低 |
Shelli |Baida | 2900.00|低 |
...
SELECT e.first_name,
e.last_name,
e.salary,
CASE
WHEN e.salary < 5000 THEN '低'
WHEN e.salary < 15000 THEN '中'
ELSE '高'
END AS salary_level
FROM employees e
ORDER BY CASE
WHEN e.salary < 5000 THEN 3
WHEN e.salary < 15000 THEN 2
ELSE 1
END, first_name;
first_name |last_name |salary |salary_level|
-----------|-----------|--------|------------|
Lex |De Haan |17000.00|高 |
Neena |Kochhar |17000.00|高 |
Steven |King |24000.00|高 |
Adam |Fripp | 8200.00|中 |
Alberto |Errazuriz |12000.00|中 |
Alexander |Hunold | 9000.00|中 |
Allan |McEwen | 9000.00|中 |
Alyssa |Hutton | 8800.00|中 |
Amit |Banda | 6200.00|中 |
Bruce |Ernst | 6000.00|中 |
Charles |Johnson | 6200.00|中 |
Christopher|Olsen | 8000.00|中 |
Clara |Vishney |10500.00|中 |
...
NULLIF(expression_1, expression_2)
CASE
WHEN expression_1 = expression_2 THEN NULL
ELSE expression_1
END
SELECT NULLIF(1, 1), NULLIF('A', 'B');
nullif|nullif|
------|------|
|A |
SELECT 1 / 0; -- 除零错误
SELECT 1 / NULLIF(0 , 0);
COALESCE(expression_1, expression_2, expression_3, ...)
CASE
WHEN expression_1 IS NOT NULL THEN expression_1
WHEN expression_2 IS NOT NULL THEN expression_2
WHEN expression_3 IS NOT NULL THEN expression_3
...
END
SELECT e.first_name,
e.last_name,
e.commission_pct,
COALESCE(e.commission_pct, 0)
FROM employees e;
first_name |last_name |commission_pct|coalesce|
-----------|-----------|--------------|--------|
Steven |King | | 0|
Neena |Kochhar | | 0|
Lex |De Haan | | 0|
...
John |Russell | 0.40| 0.40|
Karen |Partners | 0.30| 0.30|
Alberto |Errazuriz | 0.30| 0.30|
Gerald |Cambrault | 0.30| 0.30|
Eleni |Zlotkey | 0.20| 0.20|
Peter |Tucker | 0.30| 0.30|
...
原文作者:SQL编程思想;如有侵权,请联系管理员删除。