SQL语句group by 与order by 执行顺序引发的一场“内斗”
直入主题!看看下面这SQL会不会报错?如果报错应该是什么错误!
--说明:黑色字体都是列
SELECT
application_id,
index_num,
num,
amount
FROM
`credit_repayment_plan`
WHERE
status = 'unclosed'
GROUP BY
application_id
ORDER BY
gmt_create
;
MySQL下应该没啥问题,比较智能!
但是针对于oracle 数据库竟然报错:group by 表达式出错!
这就比较尴尬了,公司封装的组件怎么可能会有这样的情况存在呢?
于是按照SQL执行顺序进行解读:
(1)from
(2) join
(3) on
(4) where
(5)group by
(6) avg,sum.... (组函数)
(7)having
(8) select
(9) distinct
(10) order by
好的!按照我们这里的顺序进行对应:
FROM
`credit_repayment_plan`
WHERE
status = 'unclosed'
GROUP BY num SELECT application_id, num, amount, index_num ORDER BY gmt_create ;
这里就找到问题了:这个时候的order by 拍排序,其实是针对select查询出来的临时表进行排序的,那么临时表中并没有
gmt_create 字段,所以会报错!
然而,报错却是 group by 表达式出错;
这个问题一直也是比较解决的,为啥会有这样的一个问题!
猜想一:应该是在进行order by 的时候,判断了这个列是一个数据库应该存在的列,而临时表不存在,select 的字段只能来自函数的计算 或者 group by 的分组字段。所以认定为group by 没有查询该字段导致的查询的临时表结果中没有对应的列,从而order by 就会出错。归根于group by 的问题!
猜想二:当前SQL的有效操作关键字优先级较高的就是group by,所以定位是group by 的问题。 当然以上都是猜想,具体怎么回事,还未知。等日后请教别人之后再评论区补充。 总结:针对于oracle 数据库,使用group by 以及 order by 的时候,如果order by 使用的排序字段再select 中没有查询,那么可能报错的内容是group by表达式错误! 到时候需要讲order by 的对应列防盗select 中,应该就可以解决。当然具体问题具体分析!
SQL语句group by 与order by 执行顺序引发的一场“内斗”的更多相关文章
- sql server where、group by、order by 执行顺序
2012-02-07 19:39 先where 条件1,再 group by 条件2再 order by 条件3 如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里. 如果出现 ...
- sql语句Group By用法-转载
sql语句Group By用法一则 2007-10-25 12:00 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么 ...
- SQL语句在查询分析器中可以执行,代码中不能执行
问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...
- sql语句or与union all的执行效率比较
看到一篇文章是讲sql语句or与union all的执行效率比较的,以前没怎么注意这个问题,感觉文章写的不错,转来一看. 文章原链接:http://www.cunyoulu.com/zhuanti/q ...
- 在 sql 语句出现 warning 之后,立刻执行 `show warnings;` 就可以看到 warning 提示信息
在 sql 语句出现 warning 之后,立刻执行 show warnings; 就可以看到 warning 提示信息
- 一条SQL语句在MySQL中是如何执行的
概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...
- MyBatis拦截器的执行顺序引发的MyBatis源码分析
你猜一下哪个先执行?反正不要按常规来. <plugins> <plugin interceptor="com.Interceptor1"></plug ...
- SQL语句在数据库中是如何执行的
第一步:应用程序把查询SQL语句发给服务器端执行 我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理. 第二步:服务器解析请求的SQL语句 SQL计划缓存, ...
- SQL的GROUP BY 与 Order By
1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...
随机推荐
- python 类方法的互相调用及self的含义
每次调用内部的方法时,方法前面加 self. class MyClass: def __init__(self): pass def func1(self): # do something pri ...
- python判断一个数字是整数还是浮点数&判断整除
判断整数还是浮点数 >>> a=123 >>> b=123.123 >>> isinstance(a,int) True >>&g ...
- apm飞控飞行模式详解
1.稳定模式Stabilize稳定模式是使用得最多的飞行模式,也是最基本的飞行模式,起飞和降落都应该使用此模式.此模式下,飞控会让飞行器保持稳定,是初学者进行一般飞行的首选,也是FPV第一视角飞行的最 ...
- MultiThread(VS2013 MFC多线程-含源码-含个人逐步实现文档)
原文:http://download.csdn.net/download/jobfind/9559162 MultiThread(VS2013 MFC多线程-含源码-含个人逐步实现文档).rar
- 微信小程序-03-小程序开发框架
微信小程序-03-小程序开发框架 官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html 小程序开发框架 ...
- Redis Windows环境启动
1.找到redis安装目录 2.cmd 目录 3.输入redis-server.exe redis.windows.conf 启动成功
- js作用域链以及全局变量和局部变量
> [带var] > 在当前作用于中声明了一个变量,如果当前是全局作用域,也相当于给全局作用域设置了一个属性叫做a ```javascript //=>变量提升:var a; < ...
- 关闭SSL证书验证
转载 Python3之关闭SSL证书验证 转载 Python requests 移除SSL认证,控制台输出InsecureRequestWarning取消方法 报错信息: Traceback (mos ...
- 购买 In-app Billing 商品
购买 In-app Billing 商品 一旦你的应用连接上了 Google Play,你就可以初始化内购商品的购买请求了.Google Play 提供了结算接口,可以让用户进入使用他们的支付方式,所 ...
- 初始python(二)
1. 列表list 1.1 切片# 定义一个list.list = [1, 2, 3, 4, 5] 从左往右读取字符(默认步长为 1 ).如:list[-2:-1] # 返回一个list数据类型,[ ...