MYSQL数据库联合使用GROUP BY和ORDER BY后ORDER BY排序失效的问题
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分组之后再进行orde
·
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语句如下:
可以看到分组查询出来的数据不是最大时间。第一个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)
更多推荐
已为社区贡献1条内容
所有评论(0)