微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rownum语句返回的行与没有它的行不同

如何解决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 ServerTOPMysqLLIMIT``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 举报,一经查实,本站将立刻删除。