2012-10-17 179 views
2

我有一桌子的人,每個人都有的訪問量優先MySQL的使用GROUP BY和ORDER BY的

ID | NAME   | VISITS | PRIORITY 
--------------------------------------- 
1 |  John  | 1 | 0 
2 |  Joe  | 2 | 1 
3 |  Peter  | 1 | 1 
4 |  Sara  | 0 | 2 
5 |  Phillip | 5 | 0 
6 |  Bob  | 3 | 1 
7 |  Andrew | 4 | 2 

只有在某些允許的優先級:(0, 1,2)

如何創建一個查詢,讓我按照訪問次數(從最低開始)排序,但在其相應的優先級組中排序?

所以結果應該是這樣的:

ID | NAME   | VISITS | PRIORITY 
--------------------------------------- 
1 |  John  | 1 | 0 
2 |  Philip | 5 | 0 
3 |  Peter  | 1 | 1 
4 |  Joe  | 2 | 1 
5 |  Bob  | 3 | 1 
6 |  Sara  | 0 | 2 
7 |  Andrew | 4 | 2 

我認爲必須有一些使用GROUP BY子句,但林不知道如何使用它。

回答

4

你會使用ORDER BY和兩列。

SELECT * FROM people ORDER BY priority, visits; 
+2

'子句'在這裏是正確的嗎? – 2012-10-17 15:27:24

+0

@JackDouglas其實你是對的......從技術上講,ORDER BY子句是「ORDER BY優先級,訪問次數」,右邊的可能是「Subject」。 – hsanders

8

您剛纔嘗試ORDER BY

select id, name, visits, priority 
from people 
order by priority, visits 

SQL Fiddle with Demo

+0

當然,但是這只是根據優先級列表排序。 – NumberFour

+0

@NumberFour不,它沒有。它根據優先級和訪問次序進行排序。 – Taryn

+1

@downvoter謹慎解釋? – Taryn

2

試試這個:

Select * from table order by priority, visits 

注:ID列不會對你的結果的原因的順序每次訪問已經有了它的ID,你的結果應該是這樣的:

ID | NAME   | VISITS | PRIORITY 
--------------------------------------- 
1 |  John  | 1 | 0 
5 |  Philip | 5 | 0 
3 |  Peter  | 1 | 1 
2 |  Joe  | 2 | 1 
6 |  Bob  | 3 | 1 
4 |  Sara  | 0 | 2 
7 |  Andrew | 4 | 2