2012-10-17 131 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