Oracle
 sql >> база данни >  >> RDS >> Oracle

Изявлението 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 Server TOP и MySQL LIMIT и двете се прилагат след order by клауза.

Бележка 2:

В Oracle Database 12c ( 12.1), има нова функция за избиране на редове от k до k+m , offset k rows fetch next m 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 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да направите заявка за данни на hugeblob

  2. Стойности на Oracle ROWID

  3. Как да прехвърля дъмп файл на Oracle към екземпляр на AWS RDS?

  4. как да изпратите имейл чрез Pl/sql

  5. Получаване на ORA-01882:регионът на часовата зона не е намерен с Oracle UCP, на екземпляр на aws ec2?