sql >> Database >  >> RDS >> Oracle

Rownum-instructie retourneert een andere rij dan zonder deze

Uw probleem wordt veroorzaakt door het feit dat de where clausule wordt toegepast vóór order by .

U kunt het probleem omzeilen door eerst te sorteren en vervolgens rownum . toe te passen :

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;

Opmerking:

Dit probleem is Oracle-specifiek. MS SQL Server TOP en MySQL LIMIT worden beide toegepast na de order by clausule.

Opmerking 2:

In Oracle Database 12c ( 12.1), is er een nieuwe functie voor het selecteren van rijen k tot en met k+m , offset k rows fetch next m rows only . Ik zou aanraden om het te gebruiken in plaats van de bovenstaande oplossing. Met dank aan Lalit Kumar B voor het erop wijzen.

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

Maar wat als er twee (of meer) afdelingen zijn met hetzelfde nummer? Maak je geen zorgen, er is een variant die alle banden retourneert:

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. PHP/MySQL:UPDATE-query's combineren?

  2. Kan geen verbinding maken met oracle 11g via java

  3. Een door PDO geretourneerd object in zijn eigen klasse instellen

  4. Oracle bestellen door voor verschillende voorwaarden