我的emp
表架构为(empno , ename , hiredate ,sal,job)
,我的查询为:
查找81年分配工作的年薪总额。
我写了以下查询:
select job, sum(Sal*12)
from emp
group by job
having (extract(year from hiredate)) = '1981' ;
此查询的输出为“不是按表达式分组”,请指导我在此处识别问题。
答案 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';