【发布时间】:2013-12-03 04:24:34
【问题描述】:
我正在尝试理解没有聚合函数的 GROUP BY (oracle dbms 的新手)。
它是如何运作的?
这是我尝试过的。
我将在其上运行 SQL 的 EMP 表。
SELECT ename , sal
FROM emp
GROUP BY ename , sal
SELECT ename , sal
FROM emp
GROUP BY ename;
结果
ORA-00979:不是 GROUP BY 表达式
00979. 00000 - “不是 GROUP BY 表达式”
*原因:
*行动:
行错误:397 列:16
SELECT ename , sal
FROM emp
GROUP BY sal;
结果
ORA-00979:不是 GROUP BY 表达式
00979. 00000 - “不是 GROUP BY 表达式”
*原因:
*操作:行错误:411 列:8
SELECT empno , ename , sal
FROM emp
GROUP BY sal , ename;
结果
ORA-00979:不是 GROUP BY 表达式
00979. 00000 - “不是 GROUP BY 表达式”
*原因:
*操作:行错误:425 列:8
SELECT empno , ename , sal
FROM emp
GROUP BY empno , ename , sal;
所以,基本上列数必须等于 GROUP BY 子句中的列数,但我仍然不明白为什么或发生了什么。
【问题讨论】:
-
如果没有聚合函数并且您不介意按升序或降序获取结果,则可以改用排序 (ORDER BY)。
-
从功能上讲,如果您在选择中使用没有聚合函数的 GROUP BY,那么您只是在执行 DISTINCT。 Oracle 似乎对每种方法都使用了不同的方法,但结果却是相同的。
标签: sql oracle group-by aggregate-functions