MySQL 5.6以上版本group by中的子查询失效

1、类似于QQ聊天,打开软件要求显示最新的回复消息,正常思维是先总体分组(group by)然后再对每个小分组进行排序(order by)

SQL:

SELECT t.* FROM (SELECT * 
        FROM private_letter p
        WHERE belong_id = 123456 
        ORDER BY create_time DESC) t 
 GROUP BY t.session_id;

结果显示还是默认

经查阅资料发现,mysql 5.6以上版本对子查询中的排序进行优化,是不会执行的。

解决办法:在子查询中加入 limit 关键字即可解决,

成功解决后是这样的:

SQL:

SELECT t.* FROM (
        SELECT * 
        FROM private_letter p
        WHERE belong_id = 123456 
        ORDER BY create_time DESC LIMIT 10) t 
 GROUP BY t.session_id;

至此,成功解决子查询中排序的问题!

posted @ 2021-03-10 11:44  koooin  阅读(605)  评论(0编辑  收藏  举报