理科物理化学后不知道名字怎么排序!
问题:表达式主题 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
我在 SQLZOO 中尝试过,并且遵循 SQL 给出了正确的结果。
SELECT winner, subject
FROM nobel
WHERE yr=1984
ORDER BY subject IN ('Physics','Chemistry'), subject, winner
Run Code Online (Sandbox Code Playgroud)
该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 不会。