2010-12-15 53 views
12

我有如下表:MySQL的GROUP BY和排序每組

ID NAME TIME 
1 A 0 
2 A 3 
3 B 1

我使用下面的查詢產生:

SELECT * FROM `table` GROUP BY `NAME` 
ID NAME TIME 
1 A 0 
3 B 1

而且我想用GROUP BY生成一個結果如下(按TIME列排序):

ID NAME TIME 
2 A 3 
3 B 1
+1

通過閱讀你的問題,這是有些不明確的,你怎麼想的字段進行排序。 – Starx 2010-12-15 09:43:21

+0

這並不是100%清楚你想要得到什麼結果。也許試着說清楚你實際上想做什麼。 – Josh 2013-03-08 03:25:20

+0

但是如果我想要「按順序」去自然順序呢? – 2015-01-22 09:42:13

回答

15
SELECT NAME, MAX(TIME) as TIME 
FROM table 
GROUP BY time 
ORDER BY time DESC 
+0

這實際上適用於我。它比基於子查詢的解決方案少得多,但速度更快。 – 2016-06-26 11:19:27

+3

無法保證「NAME」列與「MAX(TIME)」位於同一行。鑑於上述數據或小數據集,它可能工作得很好,但絕不可靠。有關詳細的討論,請參閱http://stackoverflow.com/questions/14770671/mysql-order-by-before-group-by?noredirect=1#comment63515985_14770671 – 2016-06-27 07:55:41

+0

這是工作!似乎只有'ORDER BY'子句可以接受'SELECT'子句中的別名,這是一個不錯的訣竅。 – JasonMing 2017-12-27 07:22:40

0

那麼,你必須決定你想看到的ID和組後的時間字段。作爲一個例子,我將選擇MAX(ID)和SUM(時間),然後按總時間降序排序。

SELECT MAX(id), name, SUM(time) AS totaltime 
FROM YourTableName 
GROUP BY name 
ORDER BY totaltime DESC 

希望這有助於。

6
select * from (select * from table order by TIME DESC) t group by NAME