sqlzoo错题总结-2

目录

说明

题目2

答案1:

答案2:

答案3:


说明

最近在练习sqlzoo,遇到错题就总结到这里,让自己回顾一下


题目2

数据表如下:

题目如下:(属于sqlzoo第三个SELECT的练习最后一题)

The expression subject IN ('Chemistry','Physics') can be used as a value - it will be 0 or 1.

Show the 1984 winners and subject ordered by subject and winner name; but list Chemistry and Physics last.

将1984年的获奖者和获奖项目列出,按照项目和获奖者名字排序,但是化学和物理奖的数据排在最后;

这里卡了很长时间,虽然知道肯定用第一个提示,但是没想出用它的方法,想要将某几条数据排到最后,分成两组再排序是最好的办法,因此提示的这个subject IN ('Chemistry','Physics')就是分组最好的依据,在其中的项目会显示1,不在其中的会显示0,因此在order by中通过if或者case when语法来判断,答案如下:


答案1:

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY IF(subject IN ('Physics','Chemistry'),1,0),subject,winner

根据if表达式,当subject在那两项中时,输出1,不在则输出0,然后默认按照asc格式降序排列,因此就可以做到题目要求的0的项目在前,1的项目在后边显示输出;其实这个答案有点画蛇添足,因为subject in ('Physics','Chemistry')本身就可以作为数值输出

答案2:

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY CASE WHEN subject IN ('Physics','Chemistry') THEN 1 ELSE 0 END,subject,winner

和答案1一样,只是将if表达式替换为了case when,道理是一样的

答案3:

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'),subject,winner

如同答案1所说的,subject in ('Physics','Chemistry')本身就可以作为数值输出,因此直接在order by中使用即可

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值