我遇到SQL查询问题。
问题:显示最高工资大于10000的所有部门。
我正在使用此输出,但它似乎不正确。
我的代码:
SELECT
Department_Name, Max_Salary
FROM
Departments
INNER JOIN
Job_History ON Departments.department_id = Job_History.department_id
INNER JOIN
Jobs ON Job_History.job_id = jobs.job_id
WHERE
Max_Salary > 10000
输出:
DEPT_NAME | MAX_SALARY
------------------------
Accounting | 16,000
Sales | 12,080
Sales | 20,080
数据库中只有一个销售部门。
对于为什么会发生这种情况的任何帮助都将不胜感激。
答案 0 :(得分:3)
可能,job_history
中有多行与“销售”部门相关。
连接操作返回所有匹配的行。
要获得明确的Department_Name列表,您可以在查询结尾添加 GROUP BY Department_name
。您还需要在选择列表中的Max_Salary
列周围使用聚合函数...例如MAX(Max_Salary)
。
最佳做法是在查询中限定所有列引用。对于不熟悉数据库模式的读者,不清楚Max_Salary
是来自Job_History
表还是Job
表。此外,关键字INNER
对连接操作没有影响,可以省略该关键字。
- 这有效
SELECT d.department_name
, MAX(j.max_salary) AS max_salary
FROM Departments d
JOIN Job_History h
ON h.department_id = d.department_id
JOIN Jobs j
ON j.job_id = h.job_id
WHERE j.max_salary > 10000
GROUP BY d.department_name
答案 1 :(得分:0)
我更愿意发表评论,但我没有足够高的声誉。
你可以尝试一下,看看它给ids带来了什么。
Select Department_Name, Max_Salary,D.department_id,J.job_id
From Departments D
INNER JOIN Job_History J_H
ON D.department_id=J_H.department_id
INNER JOIN Jobs J
ON J_H.job_id=J.job_id
WHERE Max_Salary > 10000
答案 2 :(得分:0)
Select d.department_name
, MAX(j.max_salary) AS max_salary
From Departments D
INNER JOIN Job_History J_H
ON D.department_id=J_H.department_id
INNER JOIN Jobs J
ON J_H.job_id=J.job_id
GROUP BY d.department_name
having max(j.max_salary)>10000