1

Oracle 10g Express でこの演習を行いたい

「部門名、名、姓、およびその部門で最高の給与を稼いでいる従業員の給与を取得する SQL クエリを作成します。」

このコードを試しましたが、うまくいきません。

従業員、部門という名前の 2 つのテーブルがあります。

エラー: ORA-00979: GROUP BY 式ではありません

SELECT first_name, last_name, departments.department_name, salary
FROM employees, departments

where employees.department_id = departments.department_id

group by salary

出力はそのようでなければなりません。

ここに画像の説明を入力

4

2 に答える 2

2

結果を取得するには、集計関数を使用する必要があります。この場合max()、各部門の最高給与を取得するために使用します。

これにはいくつかの書き方があります。

結合でサブクエリを使用できます。

select d.department_name,
  e.first_name,
  e.last_name,
  e.salary
from employees e
inner join
(
  select max(salary) MaxSalary, department_id
  from employees
  group by department_id
) e1
  on e.department_id = e1.department_id
  and e.salary = e1.maxsalary
inner join departments d
  on e.department_id = d.department_id;

Oracle を使用しているため、ウィンドウ関数を使用して結果を取得できます。

select department_name, first_name, last_name, salary
from 
(
  select d.department_name,
    e.first_name,
    e.last_name,
    e.salary,
    row_number() over(partition by d.department_id order by e.salary desc) rn
  from employees e
  inner join departments d
    on e.department_id = d.department_id
) d
where rn = 1

または、WHERE句を使用してデータをフィルタリングすることもできます。

select d.department_name,
  e.first_name,
  e.last_name,
  e.salary
from employees e
inner join departments d
  on e.department_id = d.department_id
where salary in (select max(salary)
                 from employees e1
                 where e.department_id = e1.department_id
                 group by department_id)
于 2013-04-03T01:14:10.450 に答える
0

あなたが尋ねている質問はGROUP BYの使用に関するものだと理解していますが、質問を詳しく見ていきます。

「部門名、名、姓、およびその部門で最高の給与を稼いでいる従業員の給与を取得する SQL クエリを作成します。」

最大給与の従業員を探しているので、Maximum 関数を調べることも役立つと思います。

GROUP BY を使用するには、集計関数が必要です。集計関数は、複数のレコードに対してタスクを実行する関数です。これらは、SUM、AVG、COUNT などの関数です。集計関数がある場合は、関数に含まれていないものでグループ化します。

あなたの例では、MAX が集計関数になり、GROUP BY を正常に使用できます。

ここに集計関数のリンクがあります

于 2013-04-03T00:48:28.773 に答える