2016-09-14 32 views
0

emp表的模式爲(empno , ename , hiredate ,sal,job),我有作爲查詢:爲什麼我在下面的查詢中通過表達式得到不是組的語法錯誤?

找到年薪總額來分配工作,逐年81

我寫了下面的查詢:

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

此查詢輸出爲「不是按表達式分組」,請指導我在此處找出問題。

+0

您使用哪個dbms? – Jens

+0

我正在使用Oracle10g – stackuser

+0

然後在下次添加標籤 – Jens

回答

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年的記錄。在比較之前沒有任何意義。

+0

但我認爲使用group by子句我們使用'having'而不是'where'子句 – stackuser

+0

您可以在'group by'之前使用'where',在'group by'之後使用'having'。 – Utsav

+0

@Utsav和?仍然不等於功能。 – jarlh

0

這個錯誤即將出現,因爲有用的子句不是group by的一部分。 將查詢重寫爲 select job, sum(Sal * 12) from SO_EMP group by job, (extract(year from hiredate)) having(extract(year from hiredate)) = '1981';