2017-09-11 5 views
0

テーブルhr(oracle)から地域別に最高平均給与グループを取得する必要があります 出力は:地域、DEPARTMENT_NAME、MAX(AVG(給与)) 出力が可能ではない領域とは、私はあなたがその地域で最も高いavarageの給料を持って地域ごとの部門(複数可)を探していたと一緒にテーブルhr(oracle)から各地域の最大(平均(給与))を持つ部門を検索する必要があります

SELECT 
t1.region_name, 
MAX(t1.avg)FROM 
(
    SELECT 
     region_name, 
     department_name, 
     round(AVG(salary)) AS avg 
    FROM 
     regions reg 
     INNER JOIN countries coun ON reg.region_id = coun.region_id 
     INNER JOIN locations loc ON coun.country_id = loc.country_id 
     INNER JOIN departments dep ON loc.location_id = dep.location_id 
     INNER JOIN employees emp ON emp.department_id = dep.department_id 
    GROUP BY 
     region_name, 
     department_name 
    ORDER BY 3 
) t1GROUP BY t1.region_name 
+0

クエリの実行時に取得しているエラーを書いてください。 –

+0

また、外側の選択クエリで部門名を選択していないため、部門名は結果に表示されません。 –

+0

あなたの答えをありがとう! 間違いはありませんが、最初の行に「t1.department_name」を追加すると(SELECT t1.region_name、t1.department_name MAX(t1.avg)FROM ........私がグループを変更しても正しく動作しない 部門にcoloumnを追加する方法がわからない アメリカのエグゼクティブ19000 europe pr 10000 –

答えて

0

をDEPARTMENT_NAME 。だから、avarageの給与であなたの結合された行をランク付けし、最高ランクの行を維持したい:

SELECT 
    region_name, 
    department_name, 
    avg_salary 
FROM 
(
    SELECT 
    reg.region_name, 
    dep.department_name, 
    AVG(emp.salary) AS avg_salary, 
    RANK() OVER (PARTITION BY reg.region_name ORDER BY AVG(emp.salary) DESC) AS rnk 
    FROM regions reg 
    INNER JOIN countries coun ON reg.region_id = coun.region_id 
    INNER JOIN locations loc ON coun.country_id = loc.country_id 
    INNER JOIN departments dep ON loc.location_id = dep.location_id 
    INNER JOIN employees emp ON emp.department_id = dep.department_id 
    GROUP BY reg.region_name, dep.department_name 
) 
WHERE rnk = 1 
ORDER BY region_name, department_name; 
0

は、次のクエリを試してみてください。

SELECT 
t1.region_name, 
t1.department_name, 
t1.avg FROM 
(
    SELECT 
     reg.region_name, 
     dep.department_name, 
     round(AVG(salary)) AS avg 
    FROM 
     regions reg 
     INNER JOIN countries coun ON reg.region_id = coun.region_id 
     INNER JOIN locations loc ON coun.country_id = loc.country_id 
     INNER JOIN departments dep ON loc.location_id = dep.location_id 
     INNER JOIN employees emp ON emp.department_id = dep.department_id 
    GROUP BY 
     reg.region_name, 
     dep.department_name 
    ORDER BY avg(SALARY) desc limit 1 
) t1 Order BY t1.region_name, t1.department_name; 
+0

@SMそれは機能していますか? –

関連する問題