为什么我在下面的查询中通过表达式得到不是组的语法错误?

时间:2016-09-14 05:32:00

标签: sql oracle oracle10g

我的emp表架构为(empno , ename , hiredate ,sal,job),我的查询为:

查找81年分配工作的年薪总额。

我写了以下查询:

select job, sum(Sal*12)
from emp
group by job
having (extract(year from hiredate)) = '1981' ;

此查询的输出为“不是按表达式分组”,请指导我在此处识别问题。

2 个答案:

答案 0 :(得分:4)

HAVING旨在与聚合一起使用。 (extract(year from hiredate))='1981'应该放在WHERE子句中。

select job,sum(Sal*12)
from emp
where extract(year from hiredate)=1981
group by job

在聚合后应用,如果要过滤聚合结果,则必须使用。在哪里没有这样的要求。根据你的问题,你试图仅捕获1981年的记录。在比较之前聚合是没有意义的。

答案 1 :(得分:0)

此错误即将发生,因为having中使用的子句不属于group by的一部分。 将查询重写为 select job, sum(Sal * 12) from SO_EMP group by job, (extract(year from hiredate)) having(extract(year from hiredate)) = '1981';