Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pernyataan Rownum mengembalikan baris yang berbeda daripada tanpanya

Masalah Anda disebabkan oleh fakta bahwa where klausa diterapkan sebelum order by .

Anda dapat mengatasi masalah dengan mengurutkan terlebih dahulu dan kemudian menerapkan 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;

Catatan:

Masalah ini khusus untuk Oracle. MS SQL Server TOP dan MySQL LIMIT keduanya diterapkan setelah order by klausa.

Catatan 2:

Di Oracle Database 12c ( 12.1), ada fitur baru untuk memilih baris k sampai k+m , offset k rows fetch next m rows only . Saya akan merekomendasikan menggunakannya daripada solusi di atas. Terima kasih kepada Lalit Kumar B karena telah menunjukkannya.

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

Tetapi bagaimana jika ada dua (atau lebih) departemen dengan nomor yang sama? Jangan khawatir, ada varian yang mengembalikan semua ikatan:

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. Menggunakan Parameter dengan Koneksi ODBC Oracle

  2. Perbarui beberapa kolom berdasarkan perhitungan persentase bijaksana di Oracle

  3. Cara mengimpor oracle dump dari instans EC2 ke RDS di AWS

  4. menggunakan nilai yang dipisahkan koma di dalam klausa IN untuk kolom NUMBER

  5. Bagaimana cara menggunakan batasan pemeriksaan Oracle untuk membatasi jumlah pendaftaran?