SQL请教

TBNoO 2013-03-14 07:49:50
这个SQL的逻辑有点难理解,请高手指教:


select deptno, ename, sal
from emp e1
where
(select count(1)
from emp e2
where e2.deptno=e1.deptno and e2.ename!=e1.ename and e2.sal>e1.sal)
<2
order by deptno, sal desc;


是不是先执行
select count(1)
from emp e2 , emp e1
where e2.deptno=e1.deptno and e2.ename!=e1.ename and e2.sal>e1.sal
如果是这样,返回的值是26,怎么可能比数字2小?

请高手指教下。
...全文
361 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
feiyu107 2013-03-24
  • 打赏
  • 举报
回复
2楼正解!!!!!!!!!!!
TBNoO 2013-03-19
  • 打赏
  • 举报
回复
还是不理解!
notebook800 2013-03-19
  • 打赏
  • 举报
回复
引用 6 楼 ziwen00 的回复:
引用 5 楼 badyflf 的回复:还是不理解! 本来就是一个逻辑上不是很清晰的SQL,找到SQL编写的目的,重新编写替换之
用我写的替换一下,你就能理解了
陈字文 2013-03-19
  • 打赏
  • 举报
回复
引用 5 楼 badyflf 的回复:
还是不理解!
本来就是一个逻辑上不是很清晰的SQL,找到SQL编写的目的,重新编写替换之
kongxv0001 2013-03-18
  • 打赏
  • 举报
回复
引用 1 楼 davinciyxw 的回复:
应该是遍历员工表,对每一个员工,找出其所在部门下(deptno)销售比其大的人数小于2的。 即:每个部门下销售排前二的员工?
fjmwish 2013-03-15
  • 打赏
  • 举报
回复
引用 1 楼 davinciyxw 的回复:
应该是遍历员工表,对每一个员工,找出其所在部门下(deptno)销售比其大的人数小于2的。 即:每个部门下销售排前二的员工?
我觉得 大体上 应该就是 这个 样子的。
notebook800 2013-03-14
  • 打赏
  • 举报
回复
同意楼上,每个部门下销售排前二的员工 但是代码写不容易理解,修改一下会好些

select deptno, ename, sal
  from (select e.*,
               row_number() over(partition by deptno order by sal desc) rn
          from emp e)
 where rn <= 2;
  • 打赏
  • 举报
回复
应该是遍历员工表,对每一个员工,找出其所在部门下(deptno)销售比其大的人数小于2的。 即:每个部门下销售排前二的员工?

17,082

社区成员

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

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