我有如下表: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