好吧,我有这个 select 语句,它返回担任职员的人数最少的部门编号,但由于数据库中的数据,它返回两个部门。当我添加 rownum=1 时,它给了我一个完全不同的部门编号,其中有最多的职员,我不知道为什么会这样做。感谢帮助
select deptno from emp where job='CLERK' group by deptno
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno);
我尝试在主选择语句和子选择语句中使用 rownum 但结果相同。我什至使用 order by ,它仍然产生相同的结果。
select deptno from emp where rownum=1 and job='CLERK' group by deptno
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno) order by deptno;
这是带有 rownum 和 order by 的相同语句。
您的问题是由于以下事实引起的where
条款之前应用order by
.
您可以通过先排序然后应用来解决这个问题rownum
:
select * from (
select deptno from emp
where job='CLERK'
group by deptno
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno)
order by deptno)
where rownum=1;
Note:
此问题是 Oracle 特有的。微软SQL服务器TOP
和MySQLLIMIT
都在之后应用order by
clause.
Note 2:
在 Oracle Database 12c (12.1) 中,有一个新功能用于选择行 k 到 k+m http://oracle-base.com/articles/12c/row-limiting-clause-for-top-n-queries-12cr1.php, offset k rows fetch next m rows only
。我建议使用它而不是上面的解决方案。感谢 Lalit Kumar B 指出这一点。
select deptno from emp
where job='CLERK'
group by deptno
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno)
order by deptno
fetch next 1 rows only
但是如果有两个(或更多)部门具有相同的编号怎么办?别担心,有一个变体可以返回所有关系:
select deptno from emp
where job='CLERK'
group by deptno
having count(job)=(select min(count(job)) from emp where job='CLERK'group by deptno)
order by deptno
fetch next 1 rows with ties
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)