LeetCode SQL刷题(6)- 执行顺序问题

基本执行顺序:

FROM > WHERE > GROUP BY > SELECT > ORDER BY

复杂版执行顺序:

FROM > ON > JOIN > WHERE > GROUP BY > 聚合函数 > HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

  1. where:对数据库记录生效,无法对聚合结果生效,可以过滤掉最大数量记录的条件必须写在where子句末尾,不能使用聚合函数(sum、count、max、avg)

  2. group by:如何将上面过滤出的数据分组

  3. avg:求平均值
  4. having:对上面已经分组的数据进行过滤的条

  5. select:查看结果集中的哪个列或列的计算结果
  6. distinct:对结果集重复值去重
  7. order by:按照什么样的顺序来查看返回的数

  8. limit:截取出目标页数据

以上这段转载至https://segmentfault.com/a/1190000024577490主要转载自用,若有侵权,还请联系我,谢谢啦~

聚合函数和CASE WHEN的使用关系:

聚合函数要放在外面,即:
MAX(CASE WHEN continent = 'America' THEN name ELSE NULL END) AS America
而不是:
CASE WHEN continent = 'America' THEN MAX(name) ELSE NULL END AS America

注意:CASE WHEN可以没有ELSE,但是一定要有END

SELECT 
MAX(CASE WHEN continent = 'America' THEN name ELSE NULL END) AS America,
MAX(CASE WHEN continent = 'Asia' THEN name ELSE NULL END) AS Asia,
MAX(CASE WHEN continent = 'Europe' THEN name ELSE NULL END) AS Europe
FROM
(SELECT *,ROW_NUMBER() OVER(PARTITION BY continent Order by name) AS rk
FROM student) a
GROUP BY rk
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值