1

部門ごとにグループ化された平均給与よりも高い給与を持つ従業員を選択する必要があります。

SELECT * FROM employees
WHERE salary > (SELECT AVG(salary), department_id FROM employees GROUP BY department_id)

2つの列が返されるため、失敗しています。

私はこのクエリで試しました:

SELECT * FROM employees
HAVING salary > AVG(salary)
GROUP BY (department_id)

エラーメッセージが表示されます: ORA-00979: GROUP BY 式ではありません

4

1 に答える 1

3

最も単純なクロスデータベース アプローチは、JOIN を使用することです。

SELECT employees.*
FROM employees
JOIN ( SELECT department_id, AVG(salary) avgSalary
       FROM employees
       GROUP BY department_id) departmentSalaries
  ON employees.department_id = departmentSalaries.department_id
  AND employees.salary > departmentSalaries.avgSalary

Oracle の最も効率的なアプローチは、分析関数 (別名ウィンドウ関数) を使用することです。

SELECT * FROM (
  SELECT e.*, AVG(e.salary) OVER ( PARTITION BY e.department_id ) as avgSalary
  FROM employees e) t
WHERE salary > avgSalary
于 2013-05-27T18:15:51.733 に答える