当前位置: 首页 > 面试题库 >

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

百里文景
2023-03-14
问题内容

好的,所以我有一条选择语句,该语句返回部门人数最少的部门职员,但是由于数据库中的数据,它返回两个部门。当我添加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相同的语句。


问题答案:

您的问题是由于该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

笔记2:

在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


 类似资料:
  • 我正在阅读大约1个oracle伪目录,即ROWNUM:它的返回编号指示oracle返回行的顺序。 我在这里遇到了一些行为, 示例1。创建脚本: 2插入脚本: 从客户中选择*;按照上述插入的相同顺序执行, 在这里,如果我运行选择查询, 我得到以下输出: 这里ID=2首先插入,但oracle返回第二行, 但是,如果您包含具有ROWNUM和PK的表中的任何其他列,例如 我得到了正确的输出(正确的插入顺序

  • 问题内容: 请参见以下代码,并解释输出行为。 结果是返回Val:10。 Eclipse显示警告:。 catch块中的return语句会怎样? 问题答案: 它被中的一个覆盖,因为它在所有其他操作之后执行。 这就是为什么,经验法则- 永不从回归。例如,Eclipse显示了该代码段的警告:“最终阻止无法正常完成”

  • 这是我的代码行,我得到一条警告:“函数返回non void时没有返回语句警告”,我将total声明为:static int total; 有什么建议我如何摆脱警告?

  • 问题内容: 通过将用户的IP,失败的尝试次数和最后的尝试时间记录到名为的MySQL数据库表中,我有一种简单的登录系统保护机制。但是,当我尝试使用以下代码在数据库中插入新条目时,execute()函数将返回false并无法执行。 代码如下: 我是php和MySQL的新手,通过研究,我发现SQL语法显然需要在查询的VALUE部分的字段周围加上引号,例如: 但是我在这里发现它实际上使查询停止工作(仍然尝

  • 问题内容: 在Oracle 10g中,我有以下SQL: 返回: 我想扩展此查询以确定此结果集中的dog.id的oracle rownum。 我试过了 但这并不能很好地解决(无论我匹配哪个dog.id,它都返回1)。我原本希望回来3。 谢谢你的帮助! 笔记 http://www.oracle.com/technology/oramag/oracle/06-sep/o56asktom.html 我很确

  • 问题内容: 我想知道是否有一种方法可以打印没有换行符的元素,例如 并且将打印而不是通常打印的内容 谢谢! 问题答案: 这可以用轻松完成打印() 函数 与 Python 3中 。 会给你 在 Python v2中, 您可以通过以下方式使用该函数: 作为源文件中的 第一条 语句。 如print()文档所述: 请注意,这类似于我最近回答的问题(https://stackoverflow.com/a/12