为什么我在下面的查询中得到 not a group by expression 的语法错误?

why do I get syntax error of not a group by expression in below query?

我有一个 emp table 作为 (empno , ename , hiredate ,sal,job) 的架构,我有一个查询作为 :

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

我写了下面的查询:

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

此查询的输出为 "not a group by expression ",请指导我确定此处的问题。

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

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

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

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