sql >> Databáze >  >> RDS >> Oracle

Příkaz Rownum vrací jiný řádek než bez něj

Váš problém je způsoben tím, že where klauzule se použije před order by .

Problém můžete obejít tak, že nejprve seřadíte a poté použijete 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;

Poznámka:

Tento problém je specifický pro Oracle. MS SQL Server TOP a MySQL LIMIT oba se použijí po order by doložka.

Poznámka 2:

V databázi Oracle 12c ( 12.1) je nová funkce pro výběr řádků k až k+m , offset k rows fetch next m rows only . Doporučil bych jej použít místo výše uvedeného řešení. Děkuji Lalit Kumar B za upozornění.

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

Ale co když existují dvě (nebo více) oddělení se stejným číslem? Nebojte se, existuje varianta, která vrátí všechny vazby:

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. Kroky, které je třeba podniknout, pokud dojde k výpadku MySQL

  2. Databázová tabulka Oracle v gridview

  3. Vraťte seznam událostí spouštění serveru na serveru SQL Server

  4. Ukládání datových bloků