MySQL实现分组排序并取组内第一条数据

Posted 寒爵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL实现分组排序并取组内第一条数据相关的知识,希望对你有一定的参考价值。

业务需求:需要实现分组排序并取组内状态优先级最高的数据。

示例:这里有一张这样的数据表,需求是根据error_type分组然后取status最小的第一条数据,如图:

写法一(无法实现):

select t.* from (
    select e.* from error_record e where e.status > 0 and e.error_type > 0 order by e.status
) t group by t.error_type

查询结果

 这种写法无法实现我们的需求, 原因是mysql分组查询时默认按照id从小到大的顺序排列让我们自定义的排序失效了。

写法二(可实现):

select t.* from (
    select e.* from error_record e where e.status > 0 and e.error_type > 0 order by e.status limit 1000
) t group by t.error_type

查询结果

 这种写法可以实现我们的需求, 在临时表内部排序时用limit字段固定排序, 然后在临时表外分组就可以改变group by默认排序的问题(注: 原表中error_typ为3的数据只有一条就是status: 2)。

以上是关于MySQL实现分组排序并取组内第一条数据的主要内容,如果未能解决你的问题,请参考以下文章

sql数据库怎么实现分组并取每组的前1条语句,按日期排序?

mysql分组排序后取出几条记录,

mysql分组 排序 取前2条

Hive分组取TOPN数据

mysql分组后,取每组的前3条数据(并且有顺序)

ORACLE分组排序查询