当我遇到这个问题时,我正在网上练习SQL查询:
写一个SQL查询,找出1970年获奖者的所有细节,按“主题”和“获奖者”的名字命名,但列表中最后包含“学科经济学和化学”。
以下是上述问题的解决方案。但我无法理解下面的解决方案。我在网上冲浪,想找出对逐条订货的理解,但却找不到明确的解释。我不明白当我们分配'1‘或'0’时会发生什么,以及为什么我们要这样做。我想知道在执行这个查询时实际发生了什么。
SELECT *
FROM nobel_win
WHERE year=1970
ORDER BY
CASE
WHEN subject IN ('Economics','Chemistry') THEN 1
ELSE 0
END ASC,
subject,
winner;发布于 2017-06-03 16:33:55
您的第一阶条件是
CASE
WHEN subject IN ('Economics','Chemistry') THEN 1
ELSE 0
END ASC这首先根据该条件对完整的结果集进行排序。
因此,所有subject IN ('Economics','Chemistry')获取订单结果1和其他所有订单结果0的记录。然后得到有序的ASC (升序)-所以"0"-records优先,"1"-records次之。
您可以使用case语句中的任何其他数字。2和3或20和93。它只是一个先行的指标。
在MySQL中,布尔条件的结果自动计算为1和0。所以在MySQL中,你可以把它减少到
order by subject IN ('Economics','Chemistry'),
subject,
winner;发布于 2021-03-16 07:18:55
这基本上就像
ORDER BY CASE (),
SUBJECT,
WINNER;首先,这个语句将根据大小写值进行排序,然后是subject,最后是winner。
如果科目的值不是经济学或化学,则为0,否则它将为1
https://stackoverflow.com/questions/44346112
复制相似问题