mysql - case 和 order by - 如何指定某些内容应显示在列表末尾?

标签 mysql sql database

来自: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。 哪一部分指定经济学和化学应该显示在“最后”?

最佳答案

caseSubject 为“Economics”或“Chemistry”时,此处包含的表达式的计算结果将为 1。否则将返回 0。

这作为第一个排序项包含在 SQL 查询中,按升序顺序排序。对于 01 这两个可能的值,这将按以下顺序对它们进行排序:首先是 0,然后是 1.

换句话说,第一个排序将是:

  1. 主题不是经济学或化学的所有行
  2. 主题经济学或化学的所有行

接下来,它按主题获胜者排序(因此作为副作用,在列表末尾,化学将始终排在经济学之前)。

关于mysql - case 和 order by - 如何指定某些内容应显示在列表末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62653260/

相关文章:

python - SQLAlchemy 关系加载器在表上留下锁?

mysql - #1241 插入到选择中的操作数应包含 1 列

mysql - 使用 Redis 缓存 SQL 结果

database - AIR 的面向文档的数据库?

mysql - MySQL 的哪一列应该设置为索引

sql - 3 表计数查询mysql

php - 在 codeigniter 中获取列值数组

mysql - 使用动态 XPATH 在 MySql 中提取 XML

MySQL ORDER BY 使用文件排序(2 个连接表)

mysql - 使用先前查询的结果进行sql查询