2016-06-20 2 views
0

質問:Oracle出力にスタック

アメリカ合衆国の所在地外の部門ごとに最低給与の従業員をすべて雇用しているすべての従業員の姓名、給与および職務を表示します。 このクエリから社長と副会長を除外します。 (使用サブクエリ/参加)

私はきちんと

これは私が試したものでサブクエリを使用して適切にこれを構造化するかどうかはわからないよ:

SELECT last_name, salary, job_id 
FROM employees join locations 
USING(department_id) 
WHERE job_id <> ANY (SELECT * 
        FROM employees 
        WHERE job_id <> 'AD_PRES' OR job_id <> 'AD_VP') 
AND salary > 
        (SELECT MIN(salary) 
        FROM employees 
        WHERE country_id <> 'US'); 

適切にこれを構造化する方法上の任意のヘルプは高く評価され。ありがとうございました。

+0

DEPARTMENTS表とEMPLOYEES表には、わずか2 DEPARTMENT_ID – bp06km

答えて

0
SELECT 
    last_name, salary, job_id 
FROM employees a 
INNER JOIN locations b ON a.department_id = b.department_id 
WHERE a.job_id NOT IN (
    SELECT job_id 
    FROM employees 
    WHERE 
     (job_id <> 'AD_PRES' OR job_id <> 'AD_VP') AND 
     salary > (
      SELECT MIN(salary) 
      FROM employees 
      WHERE country_id <> 'US' 
     ) 
); 

Works?

+0

ORA-00904とは: "B" "DEPARTMENT_ID":無効な識別子 00904. 00000 - "%sの:無効な識別子"。 *原因: 処置:行で エラー:4列:45 – bp06km

+0

ah LOCATIONSテーブルにdepartment_id属性がありません – bp06km

+0

住所には国名の情報しかありません – bp06km

2
SELECT last_name, 
     salary, 
     job_id 
FROM (
    SELECT last_name, 
     salary, 
     job_id, 
     RANK() OVER (PARTITION BY e.department_id ORDER BY salary) AS rnk 
    FROM employees e 
     INNER JOIN 
     departments d 
     ON (d.department_id = e.department_id) 
     INNER JOIN 
     locations l 
     ON (d.location_id = l.location_id) 
    WHERE e.job_id NOT IN ('AD_PRES', 'AD_VP') 
    AND l.country_id <> 'US' 
) 
WHERE rnk > 1; 

出力

LAST_NAME      SALARY JOB_ID 
------------------------- ---------- ---------- 
Hartstein      13000 MK_MAN  
Banda       6200 SA_REP  
Johnson       6200 SA_REP  
Ande       6400 SA_REP  
Lee        6800 SA_REP  
Sewall       7000 SA_REP  
Tuvault       7000 SA_REP  
Marvins       7200 SA_REP  
Bates       7300 SA_REP  
Smith       7400 SA_REP  
Cambrault      7500 SA_REP  
Doran       7500 SA_REP  
Smith       8000 SA_REP  
Olsen       8000 SA_REP  
Livingston      8400 SA_REP  
Taylor       8600 SA_REP  
Hutton       8800 SA_REP  
Hall       9000 SA_REP  
McEwen       9000 SA_REP  
Sully       9500 SA_REP  
Bernstein      9500 SA_REP  
Greene       9500 SA_REP  
Fox        9600 SA_REP  
Bloom       10000 SA_REP  
Tucker       10000 SA_REP  
King       10000 SA_REP  
Zlotkey      10500 SA_MAN  
Vishney      10500 SA_REP  
Cambrault      11000 SA_MAN  
Abel       11000 SA_REP  
Ozer       11500 SA_REP  
Errazuriz      12000 SA_MAN  
Partners      13500 SA_MAN  
Russell      14000 SA_MAN 

クエリ2 - 分析関数をを使用せず:

SELECT last_name, 
     salary, 
     job_id 
FROM employees e 
     INNER JOIN 
     departments d 
     ON (d.department_id = e.department_id) 
     INNER JOIN 
     locations l 
     ON (d.location_id = l.location_id) 
WHERE e.job_id NOT IN ('AD_PRES', 'AD_VP') 
AND l.country_id <> 'US' 
AND e.salary > ANY(SELECT salary 
         FROM employees ee 
         WHERE ee.department_id = e.department_id); 

又は

AND e.salary > (SELECT MIN(salary) 
        FROM employees ee 
        WHERE ee.department_id = e.department_id); 
+0

ORA-00904: "L" "DEPARTMENT_ID":無効な識別子 00904. 00000 - "%sの:無効な識別子"。 *原因: 処置:ラインで エラー:12カラム:bp06km @ 15 – bp06km

+0

が – MT0

+0

それを更新しました働くRank()がPARTITION BYと同様に何をするのか説明できますか?感謝 – bp06km

関連する問題