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-elseswitch 语句。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里面