sql >> Database teknologi >  >> RDS >> Oracle

Hvordan kan jeg VÆLGE den første række med MAX(kolonneværdi)?

Hvorfor virker din anden forespørgsel ikke...

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

Du grupperer efter både Item_No og Quantity og Item_No ser ud til at være den primære nøgle og indeholder unikke værdier, så hver gruppe vil kun indeholde én række. HAVING klausul ser inden for gruppen, så den vil kontrollere, at værdien af ​​quantity er den maksimale værdi inden for den gruppe, men der er kun én værdi i gruppen, så dette vil altid være sandt. Din forespørgsel svarer til:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;
 

Nogle andre måder at få den maksimale værdi på:

SQL Fiddle

Oracle 11g R2 Schema Setup :

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;
 

Forespørgsel 1 – Få én række med maksimalt quantity og seneste item_no (ved hjælp af 1 tabelscanning) :

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

Resultater :

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

Forespørgsel 2 – Få én række med maksimalt quantity og seneste item_no (ved hjælp af 1 tabelscanning) :

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

Resultater :

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

Forespørgsel 3 – Hent alle rækker med maksimalt quantity (ved hjælp af 1 tabelscanning) :

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

Resultater :

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

Forespørgsel 4 – Hent alle rækker med maksimalt quantity (ved hjælp af 2 tabelscanninger) :

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

Resultater :

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

  1. plsql - hvordan man returnerer associative array til java

  2. php/mysql postnummer nærhedssøgning

  3. Hvordan finder man dubletter i mysql-tabel ved hjælp af PHP?

  4. Brug af variabler som OFFSET i SELECT-statments inde i mysqls lagrede funktioner