如何解决Rownum语句返回的行与没有它的行不同
您的问题是由于该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;
此问题是特定于Oracle的。子句之后同时应用了MS sql ServerTOP
和MysqL 。LIMIT``order by
在Oracle数据库12c中(12.1),存在一种用于通过K + M选择行k中的新功能,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
解决方法
好的,所以我有一条选择语句,该语句返回部门人数最少的部门职员,但是由于数据库中的数据,它返回两个部门。当我添加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);
我尝试在主select语句和子select语句中使用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相同的语句。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。