我有如下表: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
我有如下表: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
SELECT NAME, MAX(TIME) as TIME
FROM table
GROUP BY time
ORDER BY time DESC
這實際上適用於我。它比基於子查詢的解決方案少得多,但速度更快。 – 2016-06-26 11:19:27
無法保證「NAME」列與「MAX(TIME)」位於同一行。鑑於上述數據或小數據集,它可能工作得很好,但絕不可靠。有關詳細的討論,請參閱http://stackoverflow.com/questions/14770671/mysql-order-by-before-group-by?noredirect=1#comment63515985_14770671 – 2016-06-27 07:55:41
這是工作!似乎只有'ORDER BY'子句可以接受'SELECT'子句中的別名,這是一個不錯的訣竅。 – JasonMing 2017-12-27 07:22:40
那麼,你必須決定你想看到的ID和組後的時間字段。作爲一個例子,我將選擇MAX(ID)和SUM(時間),然後按總時間降序排序。
SELECT MAX(id), name, SUM(time) AS totaltime
FROM YourTableName
GROUP BY name
ORDER BY totaltime DESC
希望這有助於。
嘗試從這裏http://www.cafewebmaster.com/mysql-order-sort-group這個解決方案,它能夠解決我的問題太:)
樣品:
SELECT * FROM
(
select * from `my_table` order by timestamp desc
) as my_table_tmp
group by catid
order by nid desc
select * from (select * from table order by TIME DESC) t group by NAME
通過閱讀你的問題,這是有些不明確的,你怎麼想的字段進行排序。 – Starx 2010-12-15 09:43:21
這並不是100%清楚你想要得到什麼結果。也許試着說清楚你實際上想做什麼。 – Josh 2013-03-08 03:25:20
但是如果我想要「按順序」去自然順序呢? – 2015-01-22 09:42:13