mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法
我们都知道group by 会选择保留第一条数据,默认是按照id排序的,如果我们想通过别的字段排序,比如最后创建的那条记录,可以先按照创建时间降序,再group by即可得到每个分组的最新创建的数据。
例:
通过如下sql查出两条数据
SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate DESC
现在group by id 看下结果
SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc ) a GROUP BY a.groupId
发现默认返回的是id升序后的第一个结果,这个结果明显不对的,因为子查询已经按照 effectiveDate 降序了,应该返回的是id为3的那条才对,其实是因为mysql 5.7版本对这个查询进行优化了,认为子查询中的order by可以进行忽略,只要Derived table里不包含如下条件就可以进行优化:
UNION clause
GROUP BY
DISTINCT
Aggregation
LIMIT or OFFSET
链接:5.7中Derived table变形记
解决办法:
通过limit 语句使子查询的order by生效
SELECT a.* FROM ( SELECT * FROM xxx WHERE groupId = 11 ORDER BY effectiveDate desc limit 111111111) a GROUP BY a.groupId
现在结果是我们期望的结果了。但是这必须保证limit的数量,所以也可以使用DISTINCT实现。
mysql group by 无效_Mysql5.7版本group by 子查询中order by 无效的问题解决办法相关推荐
- oracle查询失效包sql,sql – ORA-00904:子查询中的标识符无效
为什么下面的查询在oracle中不起作用? select * from ENTITY_OWNERSHIP EO where (select count (*) from ( select USER_I ...
- java 标识符无效_查询y子查询中的标识符无效
以下查询返回错误: ORA-00904: "C"."CHARGEDATE": invalid identifier 00904. 00000 - "% ...
- 当WHERE子句、GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序
当WHERE子句.GROUP BY子句和HAVING子句同时出现在一个查询中时,SQL的执行顺序如下: (1) 执行WHERE子句,从表中选取行. (2) 由GROUP BY 子句对选取的行进行分组. ...
- MySQL开发技巧 第二禅(子查询中匹配两个值、解决同属性多值过滤的问题、计算累进税的问题)
一.如何在子查询中匹配两个值 mysql子查询的使用场景及其好处 1.什么是子查询? 当一个查询是另一个查询的条件时,称之为子查询(可以在curd中) 2.常见的子查询使用场景 ...
- any在mysql语句中用法_MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...
MySQL中,子查询中可以使用运算符ANY,它表示的意思是______. 答:至少一个值满足条件 以下能对一维数组a进行正确初始化的语句是[ ] 答:int a[ ]={0; int a[10]={1 ...
- any在mysql语句中用法,MySQL中,子查询中可以使用运算符ANY,它表示的意思是______。...
MySQL中,子查询中可以使用运算符ANY,它表示的意思是______. 答:至少一个值满足条件 According to your textbook, the main purpose of a s ...
- mysql子查询中不能使用LIMIT
mysql子查询中不能使用LIMIT /* 今天遇到个问题,如下: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/ ...
- Oracle子查询中含group by 和order by,排序字段为聚合列的别名+数值函数,外层count统计出错
该问题猜测是个bug,19c版本执行结果正常,11g版本错误 建议:如果子查询中有group by 和order by,排序字段还需用数值函数处理,避免直接用别名 Oracle版本:11g 原始SQL ...
- mysql 子查询 排序_MySQL的子查询中排序
起因 有一张表保存着用户对于文件的阅读记录, 包括文件名, 读者, 阅读时间, 时长, 备注评论. create table reading_record ( id int primary key a ...
最新文章
- Python - selenium_WebDriver 鼠标键盘事件
- java垃圾回收机制串行_Java垃圾回收机制
- Oracle的存储过程和存储函数
- 第二章java编程基础测试题_Java编程基础测试题分享
- JD商家后台管理的细节
- 存储知识:U盘的实际容量要比标注容量小,你知道原因吗?
- python基础一 day6 文件操作
- Python工作笔记-dictionary的遍历以及enumerate使用以及Py3中has_key的替代
- 在Python中处理大型文件的最快方法
- 重磅,企业实施大数据的路径
- c语言编程数字炸弹,C语言实现数字炸弹小游戏
- access设置 dolby_Dolby Access免费版
- 字符个数统计 java
- 2022年6月青少年软件编程(Python)等级考试试卷(一级)
- java课程设计 博客园_201521123098 JAVA课程设计
- php更改文件为只读,word只读模式怎么修改
- 自供电面包板----面包板伴侣项目介绍
- 最经典java使用Jedis操作Redis
- JQuery替换元素
- 线性插值(双线性)(三线性)