2010-01-12 64 views
447

我想按SQL中的多列進行排序,並按不同的方向排序。 column1將按降序排序,並且column2升序。SQL多列排序

我該怎麼做?

+60

這是「谷歌搜索答案」第一個結果。至少是當我搜索「兩列sql排序」時。這是一個比等效的官方文檔頁更加可讀的地獄,甚至沒有出現在我的結果的第一頁,直到我改變我的查詢爲'mysql'order by'「 – 2014-01-30 12:14:05

+6

鑑於SO問題多久會出現在Google ,我總是覺得人們用它回答很糟糕。 SO是在這裏回答與否,我不明白爲什麼指揮網站流量是件好事 – user001 2015-10-16 11:21:01

回答

722
ORDER BY column1 DESC, column2 

此排序由column1(降序)一切第一,然後通過column2(升序,這是缺省值)每當兩排column1字段相等。

+1

在這裏如何訂購column1或column2? – PoliDev 2013-06-18 08:47:50

+0

@PoliDev,它首先以DESCending命令的第一列和第二列(按照ASCending命令)排序 – zaheer 2014-03-13 12:33:00

+62

爲了清楚起見,當兩行的column1字段相等時,首先按'column1'排序,然後按'column2' 。 – 2014-05-29 18:53:30

115
SELECT * 
FROM mytable 
ORDER BY 
     column1 DESC, column2 ASC 
264

其他的答案沒有一個具體的例子,所以這裏有雲:

鑑於以下人民表:

FirstName | LastName | YearOfBirth 
---------------------------------------- 
    Thomas | Alva Edison | 1847 
    Benjamin | Franklin | 1706 
    Thomas | More  | 1478 
    Thomas | Jefferson | 1826 

如果執行下面的查詢:

SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC 

結果集看起來像這樣:

FirstName | LastName | YearOfBirth 
---------------------------------------- 
    Thomas | More  | 1478 
    Thomas | Jefferson | 1826 
    Thomas | Alva Edison | 1847 
    Benjamin | Franklin | 1706 
+11

這個答案是非常有幫助和簡短的接受答案的一個很好的補充。 – enderland 2014-05-30 20:07:52

+2

這是一個很好的例子,許多人認爲如何在單一時間對2列進行排序,即使您將2列用於訂購查詢,實際上也不會發生 – 2014-09-28 11:51:45

+0

'Select *'* * – 2015-07-16 06:03:43

8

多列排序取決於兩列的相應值: 這裏是在這兩列有字母和數字和值進行命名,兩列ASC遞減訂單我的表的例子。在

enter image description here

現在我又在這兩列中插入新值,其中字母值:

enter image description here

現在我用下面的命令執行執行順序按這兩列 ASC order:

enter image description here

並且示例表中的列看起來像這樣。 現在再次執行相同的操作:

enter image description here

你可以看到第一列中的值是爲了說明,但第二列是不是在ASC順序。

2

您可以在多個條件中使用多個排序,

ORDER BY 
    (CASE 
     WHEN @AlphabetBy = 2 THEN [Drug Name] 
     END) ASC, 
    CASE 
     WHEN @TopBy = 1 THEN [Rx Count] 
     WHEN @TopBy = 2 THEN [Cost] 
     WHEN @TopBy = 3 THEN [Revenue] 
    END DESC 
+0

索引編制工作,如果我在「ORDER BY」裏面使用「CASE」? – 2017-09-10 10:14:21