来自:https://www.w3resource.com/sql-exercises/sql-retrieve-exercise-24.php
编写一个 SQL 查询,按主题和获奖者姓名查找 1970 个获奖者的所有详细信息;但列表最后包含了经济学和化学科目。
SELECT *
FROM nobel_win
WHERE year=1970
ORDER BY
CASE
WHEN subject IN ('Economics','Chemistry') THEN 1
ELSE 0
END ASC,
subject,
winner;
如果经济学和化学在主题栏中,则此处的 CASE 似乎返回 true。 哪一部分指定经济学和化学应该显示在“最后”?
最佳答案
case当 Subject
为“Economics”或“Chemistry”时,此处包含的表达式的计算结果将为 1
。否则将返回 0。
这作为第一个排序项包含在 SQL 查询中,按升序
顺序排序。对于 0
和 1
这两个可能的值,这将按以下顺序对它们进行排序:首先是 0
,然后是 1
.
换句话说,第一个排序将是:
- 主题不是经济学或化学的所有行
- 主题为经济学或化学的所有行
接下来,它按主题
和获胜者
排序(因此作为副作用,在列表末尾,化学将始终排在经济学之前)。
关于mysql - case 和 order by - 如何指定某些内容应显示在列表末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62653260/