一个很简单的sql问题

wanghao2979 2013-01-14 05:36:57
with
t1 as
(
select 'jones' as name,2975 as sal,10 as deptno from dual
union all
select 'scott' as name,3000 as sal,10 as deptno from dual
union all
select 'ford' as name,3000 as sal,20 as deptno from dual
union all
select 'sakl' as name,2500 as sal,10 as deptno from dual
union all
select 'wh' as name,1100 as sal,10 as deptno from dual
union all
select 'jjj' as name,11000 as sal,20 as deptno from dual
)
,
t2 as
(
select 10 as deptno,'A组' as depname from dual
union all
select 20 as deptno,'B组' as depname from dual
)
--select * from t1
--select * from t2
select count(*),depname from t1 left join t2 on t1.deptno = t2.deptno
group by depname


问题描述:查询员工人数高于各部门平均人数的部门

部门平均人数:3人

问题正确结果是:4 A组

要求:查询次数要少

求sql语句
...全文
211 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
善若止水 2013-01-15
  • 打赏
  • 举报
回复
引用 3 楼 S2060113 的回复:
除了楼上的,还可以这样写 select cnt,depname from ( select cnt, depname ,avg(cnt) over () as avg_cnt from ( select count(*) cnt,depname from t1 left join t2 on t1.deptno = t2.deptno group b……
学习了,分析函数,佩服
crazy_samba 2013-01-15
  • 打赏
  • 举报
回复
with 
 t1 as
 (
 select 'jones' as name,2975 as sal,10 as deptno from dual
 union all
 select 'scott' as name,3000 as sal,10 as deptno from dual
 union all
 select 'ford' as name,3000 as sal,20 as deptno from dual
 union all
 select 'sakl' as name,2500 as sal,10 as deptno from dual
 union all
 select 'wh' as name,1100 as sal,10 as deptno from dual
 union all
 select 'jjj' as name,11000 as sal,20 as deptno from dual
 )
 ,
 t2 as
 (
 select 10 as deptno,'A组' as depname from dual
 union all
 select 20 as deptno,'B组' as depname from dual
 ),
 t3 as
 (select count(*) num,depname from t1 left join t2 on t1.deptno = t2.deptno
 group by depname)
select * from t3 where num > (select avg(num) from t3);
RicharDu 2013-01-15
  • 打赏
  • 举报
回复
除了楼上的,还可以这样写 select cnt,depname from ( select cnt, depname ,avg(cnt) over () as avg_cnt from ( select count(*) cnt,depname from t1 left join t2 on t1.deptno = t2.deptno group by depname) ) where cnt > avg_cnt
wanghao2979 2013-01-15
  • 打赏
  • 举报
回复
DISTINCT 是我们项目组绝对不可以有的语句,效率太底,
善若止水 2013-01-14
  • 打赏
  • 举报
回复
好神奇的错误呀,真没有弄明白是怎么回事?
SELECT t2.depname,count(*) FROM t1,t2
WHERE t1.deptno=t2.deptno
GROUP BY t2.depname
HAVING COUNT(*)>
(
SELECT COUNT(*)/COUNT(DISTINCT t1.deptno) FROM t1
)
报了一下的错误

17,089

社区成员

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

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