2017-06-03 71 views
0

我在网上练习SQL查询,当我遇到这个问题就来了:ORDER BY CASE条件后台工作

写SQL查询所订购的找到的1970年获奖者所有细节,以主题和获奖者的名字;但最终还是包含了经济学和化学科目。

以下是上述问题的解决方案。但我无法理解下面的解决方案。我浏览网络寻找ORDER BY条款的理解,但找不到明确的解释。我不明白当我们分配'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; 
+1

dont'use大写,,在网络这就像你使用的是哪个DBMS尖叫 – scaisEdge

+0

? Postgres的?甲骨文? DB2?火鸟? –

回答

2

你的一阶条件是

CASE 
    WHEN subject IN ('Economics','Chemistry') THEN 1 
    ELSE 0 
END ASC 

这个排序的结果完全按照这一条件设置第一。

所以subject IN ('Economics','Chemistry')得到订单结果1和所有其他订单结果0的所有记录。然后这个订购ASC(升序) - 所以“0” - 记录第一,“1” - 记录秒。

您可以使用case语句中的任何其他编号。 232093。这只是一个指标。

在MySQL中,布尔条件的结果自动计算为10。因此,在MySQL中,你可以减少到

order by subject IN ('Economics','Chemistry'), 
     subject, 
     winner;