MYSQL数据库联合使用GROUP BY和ORDER BY后ORDER BY排序失效的问题

当我们需要使用group by 和order by来筛选排序的时候基本的语句如下
select * from a group by id order by create_date;
但是这样查询出来的结果是不正确的,order by排序失效了。

原因

由于sql语句执行的时候是先group by分组之后再进行order by排序,这就说明分组的时候取到的数据可能不是最大时间的数据,然后我们再去排序得出来的结果就不准确了

演示

数据如下
根据unboxing_id来排序。
sql语句如下:
sql语句和查询结果
可以看到分组查询出来的数据不是最大时间。第一个unboxing_id数据的最大时间明显比查询出来的结果更大,但是我们却查询出了不是最大时间的数据,说明排序是失效了的。

解决办法

经查询资料,mysql有group_concat排序的方法,优化后sql如下:

SELECT
	* 
FROM
	yw_order_unboxing_quote 
WHERE
	quote_id IN ( SELECT SUBSTRING_INDEX( group_concat( quote_id ORDER BY create_date DESC ), ',', 1 ) FROM yw_order_unboxing_quote GROUP BY unboxing_id )

查询结果如下:
在这里插入图片描述
对比第一张数据截图,可以看出,这次查询出来的结果都是分组后的最大时间数据。
sql思路:
1.使用group_concat分组排序查出结果集------

SELECT SUBSTRING_INDEX( group_concat( quote_id ORDER BY create_date DESC ), ',', 1 ) FROM yw_order_unboxing_quote GROUP BY unboxing_id

2.再筛选出最终数据。

select * from yw_order_unboxing_quote  where quote_id  in (上面sql)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐