2017-10-19 9 views
-1

department_id、job_id、最低給与の従業員を表示するSQLステートメントを作成しましたが、条件の1つに「IT」と「SALES」という名前の部門を除外する必要がありました'は、他のテーブル部門からのみアクセス可能でした。そのため、私はdepartment_idという共有列を使用して2つのテーブルを結合し、必要に応じて結果をフィルタリングすることができましたが、job_idと給与とともに表示するdepartment_idを選択することはできません。これは私がこれまで管理してきたものである:SQL:結合列を選択することができません

SELECT EMPLOYEES.DEPARTMENT_ID JOB_ID, MIN(SALARY) 
FROM EMPLOYEES JOIN DEPARTMENTS 
ON DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID 
WHERE JOB_ID NOT LIKE '%REP' 
AND DEPARTMENTS.DEPARTMENT_NAME NOT IN ('IT','SALES') 
GROUP BY EMPLOYEES.DEPARTMENT_ID 
HAVING MIN(SALARY) >= 6000 AND MIN(SALARY) <= 18000; 
+0

任意の集約関数を使用することにより、グループ内のものを追加したりする必要はありません。 EMPLOYEES.DEPARTMENT_IDのエイリアスとしてJOB_IDを使用します(間にカンマが必要です)。 – jmarkmurphy

答えて

2

まず、表の別名を読み書きするためのクエリがはるかに容易になります:

SELECT e.DEPARTMENT_ID, e.JOB_ID, MIN(e.SALARY) 
FROM EMPLOYEES e JOIN 
     DEPARTMENTS d 
     ON d.DEPARTMENT_ID = e.DEPARTMENT_ID 
WHERE e.JOB_ID NOT LIKE '%REP' AND d.DEPARTMENT_NAME NOT IN ('IT',' SALES') 
GROUP BY e.DEPARTMENT_ID, e.JOB_ID 
HAVING MIN(e.SALARY) >= 6000 AND MIN(e.SALARY) <= 18000; 

あなたはGROUP BYにすべての非集計列を必要としています。

+0

私はselect文でコンマを使いませんでした。なぜなら、それが働く唯一の方法だったからです。しかし、今は私がグループのjob_idを逃したためです。ありがとう。 – Glaz

1

SELECTの部門IDの後にクエリーにカンマがないため、部門IDのエイリアスとして扱われ、ジョブIDとしてクエリ結果に表示されます。しかし、再び、あなたは、結果として、選択リストのタイプミスを持っている、とされているように見えるGROUP BY句でジョブIDを持っていると

SELECT **EMPLOYEES.DEPARTMENT_ID, JOB_ID,** MIN(SALARY) 
    FROM EMPLOYEES JOIN DEPARTMENTS ON DEPARTMENTS.DEPARTMENT_ID=EMPLOYEES.DEPARTMENT_ID 
    WHERE JOB_ID NOT LIKE '%REP' AND DEPARTMENTS.DEPARTMENT_NAME NOT IN('IT','SALES') 
    GROUP BY EMPLOYEES.DEPARTMENT_ID,JOB_ID 
    HAVING MIN(SALARY) >= 6000 AND MIN(SALARY) <= 18000; 
関連する問題