假设表salaries包含employee_id、department_id和salary,如下所示.
e_id | dpt_id | salary
---- | ------ | ------
1 | 2 | 1000
2 | 2 | 2000
3 | 5 | 3000
4 | 6 | 500
5 | 5 | 100
6 | 1 | 1050
我想带来具有最高/最低工资的DPT,我使用了以下查询,但查询失败:
select sum_sal_per_dpt.dpt_id, max(sum_sal_per_dpt.total_salaries)
from (
select dpt_id, sum(salary) as total_salaries
from salaries
group by dpt_id ) as sum_sal_per_dpt
group by sum_sal_per_dpt.dpt_id
union
select sum_sal_per_dpt.dpt_id, min(sum_sal_per_dpt.total_salaries)
from (
select dpt_id, sum(salary) as total_salaries
from salaries
group by dpt_id ) as sum_sal_per_dpt
group by sum_sal_per_dpt.dpt_id
我得到的输出是一个带有dpt_id和工资总和的表,好像只执行子查询:
dpt_id | salary
------ | ------
2 | 3000
5 | 3100
6 | 500
1 | 1050
而不是
dpt_id | salary
------ | ------
5 | 3100
6 | 500
如果我以CTE的方式写,也是一样的.
with
sum_sal_per_dpt as (select dpt_id, sum(salary) as total_salaries
from salaries
group by dpt_id)
select sum_sal_per_dpt.dpt_id, max(sum_sal_per_dpt.total_salaries)
from sum_sal_per_dpt
group by sum_sal_per_dpt.dpt_id
union
select sum_sal_per_dpt.dpt_id, min(sum_sal_per_dpt.total_salaries)
from sum_sal_per_dpt
group by sum_sal_per_dpt.dpt_id
有谁能解释一下吗?