select sa.emp_no, emb.first_name, emb.last_name, emb.btype, sa.salary, case when emb.btype = 1 then sa.salary * 0.1 when emb.btype = 2 then sa.salary * 0.2 else sa.salary * 0.3 end as bonus from (select eb.emp_no,eb.btype,em.first_name,em.last_name from employees em inner join emp_bonus eb on em.emp_no = eb.emp_no) as emb inner join salaries sa on emb.emp_no = sa.emp_no where sa.to_date = "9999-01-01"
我本来是这样写的,就是在没有case函数的时候,计算奖金是这样(select sa.salary * 0.1 where emb.btype = 1),结果报错,然后知道了还有case函数。
CASE
语句是 SQL 中的一个条件表达式,它类似于编程语言中的 if-else
或 switch
语句。CASE
语句允许你在 SQL 查询中根据条件来返回不同的结果。它有两种形式:简单 CASE
表达式和搜索 CASE
表达式。
简单 CASE
表达式
简单 CASE
表达式对一个表达式进行多个条件测试,并返回相应的值。如果没有条件匹配,则返回 ELSE
子句中的值。如果没有匹配的条件并且没有 ELSE
子句,则返回 NULL
。
语法:
CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ... ELSE default_result END
搜索 CASE
表达式
搜索 CASE
表达式不需要对表达式进行测试,而是直接对一系列条件进行测试,并返回相应的值。同样地,如果没有条件匹配,则返回 ELSE
子句中的值。如果没有匹配的条件并且没有 ELSE
子句,则返回 NULL
。
语法:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... ELSE default_result END
我对case函数最直观的感受,就是可以直接用在select里面