2012-03-21 52 views
1

我正在學習MySQL聲明,ORDER BY。我遇到了這個教程,他們展示了一個帶有兩個子句的例子。這怎麼可能?例如:MySQL ORDER BY兩個條款

SELECT * FROM table_name ORDER BY 
score DESC, date ASC; 

這怎麼可能必須由兩個子句命令?這對我沒有意義。你的結果如何訂購兩次?

回答

3

這個查詢做這樣的事情:

ORDER score descending 
    IF there are two rows with same score 
    ORDER date ascending 

簡單地說,如果你有這個表

score date 
1  11111 
1  11113 
2  11112 

這將讓你的結果

score date 
2  11112 
1  11111 
1  11113 
+0

爲什麼日期11113的分數ID會改變?另外,11113不是日期。 – 2012-03-21 14:30:52

+1

我認爲他只顯示了一個基本示例:) – 2012-03-21 14:37:41

+0

當然,但它不準確,因爲來自列分數和列日期的數據不再匹配 – 2012-03-21 14:45:11

2

首先它按分數排序,然後對任何具有相同分數的行按日期排序。

例如,這是由Score ASC, Date ASC排序:

Score Date 

1 2012/3/2 
12 2012/3/1 
46 2012/3/1 
213 2012/3/1 
213 2012/3/2 
234 2012/3/1 
234 2012/3/2 
435 2012/3/1 
435 2012/3/2 
435 2012/3/2 
0
SELECT... 
FROM.. 
ORDER BY 
score DESC, date ASC; 

意味着它將首先命令由SCORE下降),然後通過date上升)如果你有這樣的記錄

A  B 
========== 
10  100 
10  200 
20  300 
40  500 

通過ORDER BY A DESC, B ASC

A  B 
========== 
40 500 
20 300 
10 100 
10 200 

正如你所看到的,有2條記錄10B將順序ascending這就是爲什麼你得到100 then 200而不是200 then 100