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; //这条语句能实现组内排序,但是似乎并没能去重,望有了解的同学指教
上一篇:怎样排序查询MySql查询语法
下一篇:MySQL排序分组优化