多语言展示
当前在线:1729今日阅读:97今日分享:45

mysql5.7 分组排序

mysql5.7 中的语法跟其他版本的有些区别
工具/原料

mysql数据库5.7

方法/步骤
1

问题场景:后台管理列表中,相同类型的数据只展示最新的一条

2

解决思路:方案1、先依据分组条件分组获取最新一条数据,后将单条数据组合成列表返回。因为这种方案可能会用到遍历查询,所以排除。示例: select max(add_time) group by groupCondition;// 获取一组中最新一条数据下面着重介绍第二种方案:方案2、先按照添加时间倒序排列,后分组(groupBy 默认获取符合条件的组中第一条数据)

3

解决方案:采用子句查询SELECT * FROM ( SELECT * from tableName ORDER BY add_time DESC)  alias GROUP  BY groupCondition;但是:mysql 5.7 中 ,这种语法并没有效果,正确的写法是:SELECT * FROM ( SELECT * from tableName ORDER BY add_time DESC LIMIT 0,10)  alias GROUP  BY groupCondition;重点就是加粗部分,通过 explain 查看执行计划,可以看到没有 limit 的时候,少了一个 DERIVED 操作。DERIVED用于派生表的SELECT(FROM子句的子查询),所以没有它就相当于子句里的排序并没有被执行。

注意事项
1

采用子句查询时,别名(alias)不可少,会报语法错误

2

如果有分页,分页条件要写在子句里面

3

SELECT * from tableName GROUP BY groupCondition,add_time DESC; //这条语句能实现组内排序,但是似乎并没能去重,望有了解的同学指教

推荐信息