好吧,所以我有这个select语句,返回具有最低人数的部门编号作为CLERKS,但由于数据库中的数据,它返回两个部门 . 当我添加rownum = 1时,它给了我一个完全不同的部门编号,它拥有最多的CLERKS,我不知道为什么会这样做 . 帮助赞赏
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相同的语句 .
2 回答
您的问题是由于在
order by
之前应用where
子句引起的 .您可以先排序然后应用
rownum
来解决问题:Note:
这个问题是Oracle特有的 . MS SQL Server
TOP
和MySQLLIMIT
都在order by
子句后应用 .Note 2:
In Oracle Database 12c (12.1), there is a new feature for selecting rows k through k+m,
offset k rows fetch next m rows only
. 我建议使用它而不是上面的解决方案 . 感谢Lalit Kumar B指出它 .但是,如果有两个(或更多)部门具有相同的数字呢?别担心,有一个变体会返回所有关系:
继@Klas的另一个答案之后:
在 Oracle 12c 中,您可以使用新的 Top-N row-limiting feature .
例如,