ORA-00979: not a GROUP BY expression

ORA-00979: not a GROUP BY expression

豆子 163 2022-03-04

在带有 group by 子句的查询语句中,在 select 列表中指定的列,要么是在 group by 子句中指定的列,要么包含在聚合函数中,并且不能用别名。

很好理解,用分组查询查出来的列,要么是分组本身,要么是按分组进行聚合运算,不可能查一个其他的列。

不能用别名,就涉及到 Oracle SELECT 语句的执行顺序了

1、FROM 子句组装来自不同数据源的数据;
2、WHERE 子句基于指定的条件对记录行进行筛选;
3、GROUP BY 子句将数据划分为多个分组;
4、使用聚合函数进行计算;
5、使用 HAVING 子句筛选分组;
6、计算所有的表达式;
7、SELECT 的字段;
8、使用 ORDER BY 对结果集进行排序。

可以看到,GROUP BY 字句的执行顺序在 SELECT 之前,当然无法使用 SELECT 的别名了,同理,ORDER BY 可以使用别名。

比如,按部门查询 emp 表的职员信息

select deptno, empno from emp group by deptno;

报错,按部门查询了怎么还能查到每个 empno,正确写法为

select deptno, count(empno) from emp group by deptno;

# ORACLE