表结构
employee_salary
salary_id | emp_id | salary
员工表结构
emp_id | first_name | last_name | gender | email | mobile | dept_id | is_active
部门:
dept_id | dept_name | manager_name | is_active
问题:
显示部门明智的员工谁的工资最高和最低?
我正在使用查询
SELECT max(salary) salary, dept_name, first_name, dept_id , 'MAX' Type
FROM (
SELECT a.salary, c.dept_name, b.first_name, b.dept_id, a.salary_id
FROM employee_salary a
LEFT JOIN employee b
ON a.emp_id = b.emp_id
LEFT JOIN department c
ON c.dept_id = b.dept_id
) t
GROUP BY dept_id
UNION ALL
SELECT min(salary) salary, dept_name, first_name, dept_id , 'MIN' Type
FROM (
SELECT a.salary, c.dept_name, b.first_name, b.dept_id, a.salary_id
FROM employee_salary a
LEFT JOIN employee b
ON a.emp_id = b.emp_id
LEFT JOIN department c
ON c.dept_id = b.dept_id
) t
GROUP BY dept_id
ORDER BY dept_id
我得到的输出如下所示。 我无法从员工表中获取相应的名字,其余所有其他字段都显示正确的值,
salary dept_name first_name dept_id Type
30000 dept_1 Paul 1 MIN
98000 dept_1 Paul 1 MAX
51000 dept_2 Aron 2 MAX
20000 dept_2 Aron 2 MIN
40000 dept_3 Steve 3 MAX
40000 dept_3 Steve 3 MIN
64000 dept_4 Henry 4 MAX
64000 dept_4 Henry 4 MIN
最佳答案
您的选择列表中不能包含非聚合函数或包含在分组依据中的值。确定employeeid 的工资最高或最低后,选择姓名。
关于MySQL 查询通过 GROUP BY 获取最大值、最小值以及单独行中的多个表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25067984/