## MySQL5.7+版本中子查询中使用order by无效
### 问题引入
这周有个项目上线,其中有一个比较负责得聚合查询。子查询使用某个字段order by排序,外层语句根据order by得结果使用group by分组去重。
预取结果:子查询使用`order by xxx desc`能正确根据某个字段倒叙排序,外层`group by`某个字段取到去重后取到第一条数据。
实际效果:子查询`order by xxx desc`后并没有进行正确倒叙排序,导致外层`group by`取到的第一条数据不是倒叙排序后的结果数据第一条。
### 问题原因及排查
经过排查,该查询在开发环境使用正常,但是线上环境排序异常。
使用`shw version();`查询两个环境MySQL版本,发现开发环境是5.6,而线上环境是5.7.查阅MySQL文档发现有句说明:**It must not have ORDER BY with LIMIT.**
即:在MySQL5.7+版本后,子查询中得`order by`必须加上`limit`,不然不会生效。
### 解决方案
在子查询的`order by xxx desc`后加上`limit 0,10`.使子查询中`order by`真正生效。
MySQL5.7+版本中子查询中使用order by无效