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

Bagaimana saya bisa MEMILIH baris pertama dengan MAX (nilai Kolom)?

Mengapa kueri kedua Anda tidak berfungsi...

select   Item_No,
         Quantity
from     Rec_details
group by Item_No,
         Quantity
having   Quantity=max(Quantity);

Anda mengelompokkan berdasarkan Item_No dan Quantity dan Item_No tampaknya menjadi kunci utama dan berisi nilai unik sehingga setiap grup hanya akan berisi satu baris. HAVING klausa terlihat di dalam grup sehingga akan memeriksa apakah nilai quantity adalah nilai maksimum dalam grup itu tetapi hanya ada satu nilai di dalam grup sehingga ini akan selalu benar. Kueri Anda setara dengan:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Beberapa cara lain untuk mendapatkan nilai maksimum:

SQL Fiddle

Pengaturan Skema Oracle 11g R2 :

create table Rec_details (item_no, Quantity ) AS
SELECT 12507,1 FROM DUAL UNION ALL
SELECT 12549,4 FROM DUAL UNION ALL
SELECT 12100,8 FROM DUAL UNION ALL
SELECT 12501,2 FROM DUAL UNION ALL
SELECT 12201,7 FROM DUAL UNION ALL
SELECT 12509,3 FROM DUAL UNION ALL
SELECT 12080,1 FROM DUAL;

Kueri 1 - Dapatkan satu baris dengan quantity maksimum dan item_no terbaru (menggunakan 1 pemindaian tabel) :

SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
       MAX( Quantity ) AS Quantity
FROM   Rec_Details

Hasil :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Kueri 2 - Dapatkan satu baris dengan quantity maksimum dan item_no terbaru (menggunakan 1 pemindaian tabel) :

SELECT *
FROM   (
  SELECT *
  FROM   Rec_details
  ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1

Hasil :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Kueri 3 - Dapatkan semua baris dengan quantity maksimum (menggunakan 1 pemindaian tabel) :

SELECT Item_no, Quantity
FROM   (
  SELECT r.*,
         RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
  FROM   Rec_details r
)
WHERE rnk = 1

Hasil :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Kueri 4 - Dapatkan semua baris dengan quantity maksimum (menggunakan 2 pemindaian tabel) :

SELECT Item_no,
       Quantity
FROM   Rec_Details
WHERE  Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )

Hasil :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. KESALAHAN pada baris 191:ORA-01489:hasil rangkaian string terlalu panjang

  2. hentikan kesalahan kompilasi dalam skrip sqlplus

  3. ORA-28040:Tidak ada protokol otentikasi yang cocok

  4. Oracle mengunci dengan SELECT...UNTUK UPDATE OF

  5. Bagaimana cara memperbaiki 'Metode 'get_Info' dalam tipe 'Oracle.EntityFrameworkCore tidak memiliki implementasi.'