case表达式


CASE表达式的写法

CASE表达式有简单CASE表达式和搜索CASE表达式两种写法

-- 简单CASE表达式
CASE sex
    WHEN '1' THEN '男'
    WHEN '2' THEN '女'
ELSE '其他' END

-- 搜索CASE表达式
CASE WHEN sex = '1' THEN '男'
    WHEN SEX = '2' THEN '女'
ELSE '其他' END

使用CASE表达式的时候,需注意以下几点:

  • 统一各分支返回的数据类型
  • 不要忘记写END
  • 养成写ELSE子句的习惯(ELSE子句是可选的,不写也不会出错,不写时,CASE表达式的执行结果是NULL)

行转列
SELECT pref_name,
     -- 男性人口
     SUM(CASE WHEN sex='1' THEN population ELSE 0 END) AS cnt_m,
     -- 女性人口
     SUM(CASE WHEN sex = '2' THEN population ELSE 0 END) AS cnt_f
FROM PopTbl2
GROUP BY pref_name;

除了SUM,COUNT、AVG等聚合函数也都可以用于将行结构的数据转换成列结构的数据


用CHECK约束定义多个列的条件关系

逻辑与和蕴含式


在UPDATE语句里进行条件分支
UPDATE Salaries
SET salary = CASE WHEN salary >= 300000
                  THEN salary * 0.9
                  WHEN salary >= 250000 AND salary < 280000
                  THEN salary * 1.2
                  ELSE salary END;

表之间的数据匹配

CASE表达式的一大优势在于能够判断表达式,也就是说,在CASE表达式里,我们可以使用BETWEEN、LIKE和<、>等便利的谓词组合,以及能够嵌套子查询的IN 和EXISTS谓词


在CASE表达式中使用聚合函数
SELECT std_id,
    CASE WHEN COUNT(*) = 1
        THEN MAX(club_id)
        ELSE MAX(CASE WHEN main_club_flg = 'Y'
                    THEN club_id
                    ELSE NULL END)
        END AS main_club
FROM StudentClub
GROUP BY std_id;

CASE表达式用在SELECT子句里时,既可以写在聚合函数内部,也可以写在聚合函数外部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值