2016-11-21 2 views
1

私はデータテーブルEmployeesを持っています。私は、従業員表の全従業員の平均給与よりも多くを稼いでいる従業員を表示したいと思います。私がこれまでに書いたコードは次のとおりです。ただしネストされた関数のグループ化によるエラー

select employee_id, last_name, salary 
from employees 
group by employee_id 
having salary > (select avg(sum(salary)) 
       from employees); 

、私はこれを実行すると、エラー「でグループなしのネストされた関数は、」発生しました。これをどうやって解決するのですか?

+0

平均を望んでいませんか?合計の必要はありませんか?すべての従業員の給与の合計を数で割った平均ではありませんか?だからなぜ合計?数学は理にかなっていませんし、コンパイラはあなたが何を後にしているかをよりよく定義するように求めています。おそらくあなたは「給与を持っている」(従業員の平均給与額を から選択しています);そしてこれを行う場合は、外部グループは必要ありません。 – xQbert

答えて

2

GROUP BYが不要です。外側のグループbyは集約されていません。 Group byは、集約関数が使用されている場合にのみ必要です。集合関数がないので、グループ化されません!

二重集約(avg(sum(salary))サブクエリは不要です。平均はそれ自身で平均を返します。合計が何をしようとしていたのか分かりません。あなたが合計を平均した場合、合計で終わるでしょう。 (私は1,2,3,4,5を持っている:15の合計は15ですが、合計は15です。しかし、平均は3です)。

,HAVINGWHEREになりません。

SELECT employee_id, last_name, salary 
FROM employees 
WHERE salary > (SELECT avg(salary) 
       FROM employees); 
+0

ありがとうxQbert!私は愚かな間違いをしました。ただAvgで十分であることを忘れてしまった。 – Tim

+0

私たちは時々2番目の目を必要とします。 (私は通常、2/1より多くの脳を必要とし、1&2は私がする間違いを補うために) – xQbert

関連する問題