当我遇到这个问题时,我正在网上练习SQL查询:
编写一个SQL查询,按订购主题和获胜者名称查找1970年获奖者的所有详细信息;但该列表最后包含了经济学和化学学科。
以下是上述问题的解决方案。但我无法理解下面的解决方案。我上网寻找ORDER BY子句的理解,但无法找到明确的解释。我无法理解当我们分配' 1'或者' 0' 0为什么我们这样做我想知道执行此查询时实际发生了什么。
SELECT *
FROM nobel_win
WHERE year=1970
ORDER BY
CASE
WHEN subject IN ('Economics','Chemistry') THEN 1
ELSE 0
END ASC,
subject,
winner;
答案 0 :(得分:2)
您的第一个订单条件是
CASE
WHEN subject IN ('Economics','Chemistry') THEN 1
ELSE 0
END ASC
根据该条件首先对完整的结果集进行排序。
所有记录subject IN ('Economics','Chemistry')
获取订单结果1
以及所有其他订单结果0
。然后这得到了ASC(升序) - 所以“0” - 记录首先出现,“1” - 记录第二。
您可以在case
声明中使用任何其他数字。 2
和3
或20
和93
。它只是一个先行的指标。
在MySQL中,布尔条件的结果自动计算为1
和0
。所以在MySQL中你可以将其减少到
order by subject IN ('Economics','Chemistry'),
subject,
winner;
答案 1 :(得分:0)
这基本上就像
ORDER BY CASE (),
SUBJECT,
WINNER;
首先,此语句将根据 CASE 值进行排序,然后是 主题,最后是 获胜者
如果科目的值不是经济学或化学,则CASE的值为0,否则为1