oracle - Oracle - 为什么 HAVING 子句可以在 GROUP BY 之前
问题描述
为什么/如何HAVING 子句可以在 GROUP BY 之前
select count(1) from tableA
having id >1
group by id
order by count(1)
我知道HAVING
从句可以没有GROUP BY
从句,
但是在定义GROUP BY
为什么HAVING
不被强迫如此作为ORDER BY
条款时?
Derby 按以下顺序处理 SelectExpression:
- FROM 子句
- WHERE 子句
- GROUP BY(或隐式 GROUP BY)
- HAVING 子句
- ORDER BY 子句
在所有文档中,它出现在GROUP BY
:
GROUP BY WORKDEPT HAVING MAX(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE WHERE NOT WORKDEPT = EMP_COR.WORKDEPT)
编辑 Oreilly文章指出顺序并不重要(但不是为什么)
SELECT 语句中 GROUP BY 子句和 HAVING 子句的顺序并不重要。我们可以在 HAVING 子句之前指定 GROUP BY 子句,反之亦然
我怀疑因为HAVING可以没有GROUP BY子句,所以不会强制执行顺序。
解决方案
因为 having 子句对结果起作用(过滤 select 的结果)
查询选择可以仅基于选择,或者如果是聚合查询
,则结果是在 GROUP BY 之后产生的
推荐阅读
- c - 将二维数组从函数返回到主函数
- mysql - 无法使用 LOAD DATA 语句将数据加载到表中(带有制表符分隔的文件)
- swift - 调整弹出窗口的大小
- encryption - 如何使用 Windows CryptoAPI 中的原始十六进制密钥值为 CryptDecrypt 创建对称密钥?
- if-statement - 析取 G1 ; G2 vs. If-then-else Cond -> G1 ; G2
- python - 通过该类的方法调用该类的参数的参数
- xml - 最小长度在下面的代码中不起作用。当我为 Name 提供空白值时,它通过了模式验证(它应该抛出错误)
- mysql - 如何修复“无法打开所需的默认文件:/usr/local/ampps/mysql/etc/my.cnf”错误?
- javascript - 在 JavaScript 中按下键时重复运行代码
- css - 如何使用响应式图像编写半垂直页面