直入主题!看看下面这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 执行顺序引发的一场“内斗”的更多相关文章

  1. sql server where、group by、order by 执行顺序

    2012-02-07 19:39 先where 条件1,再 group by 条件2再 order by 条件3 如果声明了 GROUP BY 子句,输出就分成匹配一个或多个数值的不同组里. 如果出现 ...

  2. sql语句Group By用法-转载

    sql语句Group By用法一则 2007-10-25 12:00 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么 ...

  3. SQL语句在查询分析器中可以执行,代码中不能执行

    问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...

  4. sql语句or与union all的执行效率比较

    看到一篇文章是讲sql语句or与union all的执行效率比较的,以前没怎么注意这个问题,感觉文章写的不错,转来一看. 文章原链接:http://www.cunyoulu.com/zhuanti/q ...

  5. 在 sql 语句出现 warning 之后,立刻执行 `show warnings;` 就可以看到 warning 提示信息

    在 sql 语句出现 warning 之后,立刻执行 show warnings; 就可以看到 warning 提示信息

  6. 一条SQL语句在MySQL中是如何执行的

    概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...

  7. MyBatis拦截器的执行顺序引发的MyBatis源码分析

    你猜一下哪个先执行?反正不要按常规来. <plugins> <plugin interceptor="com.Interceptor1"></plug ...

  8. SQL语句在数据库中是如何执行的

    第一步:应用程序把查询SQL语句发给服务器端执行 我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理. 第二步:服务器解析请求的SQL语句 SQL计划缓存, ...

  9. SQL的GROUP BY 与 Order By

    1.概述 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理. 2.原始表 3.简 ...

随机推荐

  1. nodo合并多个mp3文件

    nodo合并多个mp3文件 会使用到node中的fs - 文件系统 import fs from 'fs'; //读取目录下的文件,返回文件名数组[0x2.mp3,f0k.mp3]; const fi ...

  2. Flutter知识点:数据存储之sqflite

    sqflite是一款轻量级的关系型数据库,类似SQLite. 在Flutter平台我们使用sqflite库来同时支持Android 和iOS. 使用介绍 1.首选需要在pubspec.yaml 导入库 ...

  3. PHP进阶知识总结

    周末梳理了下这段时间看书的一些知识点,进步的过程不仅要实践,还要安排多看书.思考.总结. 只针对知识点进行了罗列和简单说明,很多细节还未整理好,待后面再专门详细写. 基础易忽略概念 PHP是一个支持面 ...

  4. 应用程序 调用 webservice

    首先用VS创建一个WebService服务工程,并且完成基本功能,本人完成的是html转pdf功能. 然后,新建一个Windows应用程序. 添加WebService到Windows项目中,如图 然后 ...

  5. 泛型< ? extends > <? super> 理解

    public class Test { public static void main(String [] args){ Plate<? extends Fruit> p = new Pl ...

  6. BIEE总结

    一,数据仓库,BI涉及到的相关概念  1.DW:    即数据仓库(Data Warehouse),是一个面向主题的(Subject Oriented).集成的(Integrated).相对稳定的(N ...

  7. zabbix安装故障点分析

    故障点分析:故障一:  2637:20151009:050431.719 [Z3001] connection to database 'zabbix' failed: [1045] Access d ...

  8. mongodb节点配置指南

    修改复制集节点的优先级 复制集节点的 priority 参数的值决定了选举中该节点的优先级.值越高,优先级越高. 我们可以通过修改复制集配置参数中 members 数组位置的优先级来修改对应机器的优先 ...

  9. [翻译] TWRPickerSlider

    TWRPickerSlider https://github.com/chasseurmic/TWRPickerSlider Usage Add the dependency to your Podf ...

  10. RCLighting

    RCLighting https://github.com/RidgeCorn/RCLighting 效果: 真机测试的效率: 看了源码,其实原理很简单: ====================== ...