如何解决SQL 多行子查询比较
我想返回部门id-s,其中部门的最低工资高于其他部门的最高工资。 这是我的查询:
select *
from hr.employees
where (select min(salary) from hr.employees group by department_id) < any (select max(salary) from hr.employees group by department_id)
即使我使用任何运算符...
有人可以帮忙吗?
解决方法
这是一种方法。首先汇总按部门分组的工资,收集每个部门的最低和最高工资。然后根据问题中的条件自行加入结果(将结果加入自身)。我使用了一个 with
子句,它允许 Oracle 只进行一次聚合。我包括“高薪”部门的最低工资和“低薪”部门的最高工资,只是为了确认查询按预期工作。输出非常大(27 行),但不会大到不适合这个答案。
with d as (
select department_id,min(salary) as min_sal,max(salary) as max_sal
from hr.employees
group by department_id
)
select d1.department_id as dept_highsal,d1.min_sal as dept_higsal_min_sal,d2.department_id as dept_lowsal,d2.max_sal as dept_lowsal_max_sal
from d d1 inner join d d2 on d1.min_sal > d2.max_sal
;
输出:
DEPT_HIGHSAL DEPT_HIGSAL_MIN_SAL DEPT_LOWSAL DEPT_LOWSAL_MAX_SAL
------------ ------------------- ----------- -------------------
90 17000 80 14000
90 17000 20 13000
90 17000 100 12008
90 17000 110 12008
90 17000 30 11000
90 17000 70 10000
90 17000 60 9000
90 17000 50 8200
90 17000 7000
90 17000 40 6500
90 17000 10 4400
70 10000 60 9000
70 10000 50 8200
70 10000 7000
70 10000 40 6500
70 10000 10 4400
110 8300 50 8200
110 8300 7000
110 8300 40 6500
110 8300 10 4400
7000 40 6500
7000 10 4400
100 6900 40 6500
100 6900 10 4400
40 6500 10 4400
80 6100 10 4400
20 6000 10 4400
,
试试这个:
select d_id1,d_id2
(select department_id d_id1,min(salary) min_salary
from hr.employees
group by department_id) q1
join
(select department_id d_id2,max(salary) max_salary
from hr.employees
group by department_id) q2
on q1.min_salary > q2.max_salary
,
谢谢各位。
这是一个解决方案:
select * from (select main_temp.department_id,min(salary) min_salary,(从 hr.employees temp 中选择 max(salary) where temp.department_id main_temp.department_id) others_max 来自hr.employees main_temp,其中department_id 不是null group by department_id) where min_salary > others_max
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。