查询出人数最多的那个部门的部门编号和部门名称

Guyt07435 2012-08-11 08:21:57
--查询出人数最多的那个部门的部门编号和部门名称
select e.deptno, d.dname, count(1)
from (select cout
from (select count(1) cout
from emp e
group by e.deptno
order by 1 desc)
where rownum = 1) t,
emp e,
dept d
where e.deptno = d.deptno
group by e.deptno, d.dname
having count(1) = t.cout

最后一行报错,把t.cout换成任意的数字就可以了,不明白,在线等
...全文
3095 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
人生无悔 2012-08-11
  • 打赏
  • 举报
回复

--这样就会把最多的所有部门显示出来了,不会只显示第一条了,而是第一组
select deptno,dname,cou from(
select deptno,dname,cou,rank() over (order by cou desc) rn from
(select dept.deptno,min(dept.dname) dname,count(emp.empno) cou
from dept left join emp on dept.deptno=emp.deptno
group by dept.deptno order by cou desc) t)
where rn=1;
Guyt07435 2012-08-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

你的错误是:
如果having中出现的列,则必须出现在group by中或是出现在聚合函数中

例:你可以这样写,也是你要的结果
SQL code

select e.deptno, d.dname, count(1)
from (select cout
from (select count(1) cout
from emp e
group by e.deptno
……
[/Quote]

明白,3Q!
人生无悔 2012-08-11
  • 打赏
  • 举报
回复
你的错误是:
如果having中出现的列,则必须出现在group by中或是出现在聚合函数中

例:你可以这样写,也是你要的结果

select e.deptno, d.dname, count(1)
from (select cout
from (select count(1) cout
from emp e
group by e.deptno
order by 1 desc)
where rownum = 1) t,
emp e,
dept d
where e.deptno = d.deptno
group by e.deptno, d.dname
having count(1) = max(t.cout);

Guyt07435 2012-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

select deptno,dname,cou from
(select dept.deptno,min(dept.dname) dname,count(emp.empno) cou
from dept left join emp on dept.deptno=emp.deptno
group by dept.deptno order by cou desc) t
whe……
[/Quote]
这样的话,如果两个部门人数一样,而且都是最多的,就只能查询出来一个了哦
人生无悔 2012-08-11
  • 打赏
  • 举报
回复

select deptno,dname,cou from
(select dept.deptno,min(dept.dname) dname,count(emp.empno) cou
from dept left join emp on dept.deptno=emp.deptno
group by dept.deptno order by cou desc) t
where rownum=1;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧