" /> " />

目 录CONTENT

文章目录

读书笔记:SQL进阶教程

Administrator
2024-08-16 / 0 评论 / 0 点赞 / 9 阅读 / 2585 字

书籍下载:请联系管理员,《SQL进阶教程》


case

pref_name(县名) population(人口)
德岛 100
香川 200
爱媛 150
高知 200
福冈 300
佐贺 100
长崎 200
东京 400
群马 50

地区名 人口
四国 650
九州 600
其他 450
-- 把县编号转换成地区编号 (2) :将 CASE 表达式归纳到一处
SELECT CASE pref_name
 WHEN '德岛' THEN '四国'
 WHEN '香川' THEN '四国'
 WHEN '爱媛' THEN '四国'
 WHEN '高知' THEN '四国'
 WHEN '福冈' THEN '九州'
 WHEN '佐贺' THEN '九州'
 WHEN '长崎' THEN '九州'
 ELSE '其他' END AS district,
 SUM(population)
FROM PopTbl
GROUP BY district; 
-- GROUP BY 子句里引用了 SELECT 子句中定义的别名

-- 按人口数量等级划分都道府县
SELECT CASE WHEN population < 100 THEN '01'
 WHEN population >= 100 AND population < 200 THEN '02'
 WHEN population >= 200 AND population < 300 THEN '03'
 WHEN population >= 300 THEN '04'
 ELSE NULL END AS pop_class,
 COUNT(*) AS cnt
 FROM PopTbl
 GROUP BY CASE WHEN population < 100 THEN '01'
 WHEN population >= 100 AND population < 200 THEN '02'
 WHEN population >= 200 AND population < 300 THEN '03'
 WHEN population >= 300 THEN '04'
 ELSE NULL END;

pop_class cnt
--------- ----
01 1
02 3
03 3
04 2

备注:必须在 SELECT 子句和 GROUP BY 子句这两处写一样的 CASE 表达式

1. 在 GROUP BY 子句里使用 CASE 表达式,可以灵活地选择作为聚合的单位的编号或等级。这一点在进行非定制化统计时能发挥巨大的威力。

2. 在聚合函数中使用 CASE 表达式,可以轻松地将行结构的数据转换成列结构的数据。

3. 相反,聚合函数也可以嵌套进 CASE 表达式里使用。

4. 相比依赖于具体数据库的函数,CASE 表达式有更强大的表达能力和更好的可移植性。

5. 正因为 CASE 表达式是一种表达式而不是语句,才有了这诸多优点

self-join(自连接)

todo

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区