2017-06-03 69 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;