当我遇到这个问题时,我正在网上练习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;
您的一阶条件是
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;
这基本上就像
ORDER BY CASE (),
SUBJECT,
WINNER;
首先,此语句将基于案例值进行排序,然后它将用于主题,最后是 Winner
如果主题的值不是经济学或化学,则情况的价值将为0。