SQLZOO SELECT 来自诺贝尔 #14

Mat*_*hun 5 sql select

理科物理化学后不知道名字怎么排序!

问题:表达式主题 IN ('Chemistry','Physics') 可以用作值 - 它将是 0 或 1。

按主题和获奖者名称排序显示 1984 年的获奖者和主题;但最后列出化学和物理。

SELECT winner, subject, subject IN('Physics', 'Chemistry')
FROM nobel
WHERE yr=1984
ORDER BY CASE
 WHEN subject IN ('Physics', 'Chemistry') = 0 THEN subject IN ('Physics', 'Chemistry')
 WHEN subject IN ('Physics', 'Chemistry') =  THEN winner
 ELSE winner 
End
Run Code Online (Sandbox Code Playgroud)

问题的 url 以获取更多详细信息http://sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial

Dyl*_* Su 5

我在 SQLZOO 中尝试过,并且遵循 SQL 给出了正确的结果。

SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'), subject, winner
Run Code Online (Sandbox Code Playgroud)

  • 我使用相同的语句,但 SQLZOO 返回“关键字 'IN' 附近的语法不正确”。 (5认同)

jpw*_*jpw 1

in运算符不能像您那样在选择中使用,但您在子句中使用 case 表达式的路径正确order by。你想要的是这样的:

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

由于问题状态IN ('Physics','Chemistry')的计算结果为 1 或 0,因此它可以用于某些数据库中的完整 case 表达式;尽管它不符合标准 ANSI SQL。我相信 MySQL 会允许它,但例如 MS SQL 不会。