sql子查询和分组依据

时间:2014-03-18 13:30:28

标签: sql oracle11g

我正在为我的sql类做一个分配,我似乎无法弄明白。这是想要的选择的描述:

显示所有员工的薪水高于其部门同事的平均水平,仅适用于至少有4名员工的部门。

我已经能够找到像

这样的部分查询
select ename 
  from emp
 where sal > any (select avg(sal) 
                    from emp 
                  group by 
                         deptno);

获取收入高于平均值的员工姓名。

select count(deptno) 
  from emp
group by 
       deptno having count(deptno) > 4;

获得每个部门的员工人数。

但不知何故,它无法将它们连接在一起。也许有人可以帮我透露一下。

3 个答案:

答案 0 :(得分:0)

您可以将有条款分组依据

结合使用
select ename 
  from emp
 where sal > any (select avg(sal) 
                    from emp 
                  group by 
                         deptno) 
having count(*)>4;

答案 1 :(得分:0)

只需将第二个查询放入AND子句:

select ename 
  from emp
 where sal > any (select avg(sal) 
                    from emp 
                  group by 
                         deptno)
and deptno in (select deptno
               from emp
               group by 
               deptno having count(deptno) > 4);

答案 2 :(得分:0)

select ename 
  from (
        select deptno, count(deptno) 
        from emp
        group by deptno
        having count(deptno) > 4) valid_depts join emp ON emp.deptno=valid_depts.deptno
 where sal > any (select avg(sal) 
                    from emp 
                   group deptno);