2016-11-17 29 views
0

這部分代碼如何工作?ORDER BY CASE子句如何在下面的代碼中工作?

ORDER BY 
    CASE WHEN subject IN ('Chemistry','Physics') THEN 1 ELSE 0 END, 
    subject, 
    winner; 
+0

因爲它是ASC在默認情況下0的將是第一位的。那些不是化學或物理學科的科目將成爲第一名,按字母順序排列,然後按名稱排列。然後,化學然後按字母順序列出每個學科的每個獲勝者的物理學;但只適用於1984年。簡單地說,化學,然後物理將是最後兩個主題,而每個其他主題將按字母順序列出那些2. 2 – xQbert

+0

嗨,歡迎來到StackOverflow。我懇請您閱讀這兩個頁面:http://stackoverflow.com/help/mcve和特別是:http://stackoverflow.com/help/how-to-ask 雖然您的問題可能是有效的,它會是不錯,如果你把問題本身包含在正文中,而不僅僅是標題中。 – derM

+0

@xQbert幫助了我。謝謝。 –

回答

0

首先它檢查subjet是否是化學或物理。 如果它分揀得分將爲1

如果受試者不包含任何「化學」或「物理」的得分將是0

之後,它通過得分排序的結果,因此包含化學或物理學的結果將在那些不包含的結果之後出現。

+0

幾乎得到它。你說包含化學或物理的結果首先是那些沒有接下來的結果。但代碼最後給出了化學和物理 –

0

它通過案例的結果,然後由主題,然後贏家命令。

不是化學或物理的行首先出現,按主題和贏家順序排列。然後是化學,然後是物理。

試試吧。

0

我認爲這是你想要的SELECT winner, subject FROM nobel WHERE yr = '1984' AND subject IN ('Chemistry','Physics') ORDER BY CASE;