我emp
表的模式爲(empno , ename , hiredate ,sal,job)
,我有作爲查詢:爲什麼我在下面的查詢中通過表達式得到不是組的語法錯誤?
找到年薪總額來分配工作,逐年81
我寫了下面的查詢:
select job, sum(Sal*12)
from emp
group by job
having (extract(year from hiredate)) = '1981' ;
此查詢輸出爲「不是按表達式分組」,請指導我在此處找出問題。
我emp
表的模式爲(empno , ename , hiredate ,sal,job)
,我有作爲查詢:爲什麼我在下面的查詢中通過表達式得到不是組的語法錯誤?
找到年薪總額來分配工作,逐年81
我寫了下面的查詢:
select job, sum(Sal*12)
from emp
group by job
having (extract(year from hiredate)) = '1981' ;
此查詢輸出爲「不是按表達式分組」,請指導我在此處找出問題。
HAVING
旨在用於聚合。應改爲(extract(year from hiredate))='1981'
而不是WHERE
條款。
select job,sum(Sal*12)
from emp
where extract(year from hiredate)=1981
group by job
在聚合後應用聚合,如果要過濾聚合結果,則必須使用它。在哪裏沒有這樣的要求。根據你的問題,你試圖只捕獲1981年的記錄。在比較之前沒有任何意義。
這個錯誤即將出現,因爲有用的子句不是group by的一部分。 將查詢重寫爲 select job, sum(Sal * 12) from SO_EMP group by job, (extract(year from hiredate)) having(extract(year from hiredate)) = '1981';
您使用哪個dbms? – Jens
我正在使用Oracle10g – stackuser
然後在下次添加標籤 – Jens