• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

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

互联网 diligentman 2周前 (04-29) 7次浏览

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排序,这就说明分组的时候取到的数据可能不是最大时间的数据,然后我们再去排序得出来的结果就不准确了

演示

MYSQL数据库联合使用GROUP BY和ORDER BY后ORDER BY排序失效的问题
根据unboxing_id来排序
sql语句如下:
MYSQL数据库联合使用GROUP BY和ORDER BY后ORDER BY排序失效的问题
可以看到分组查询出来的数据不是最大时间。第一个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 )

查询结果如下:
MYSQL数据库联合使用GROUP BY和ORDER BY后ORDER BY排序失效的问题
对比第一张数据截图,可以看出,这次查询出来的结果都是分组后的最大时间数据。
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)


喜欢 (0)