sql >> Databasteknik >  >> RDS >> Oracle

Hur kan jag VÄLJA den första raden med MAX(kolumnvärde)?

Varför fungerar inte din andra fråga...

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

Du grupperar efter båda Item_No och Quantity och Item_No verkar vara den primära nyckeln och innehåller unika värden så varje grupp kommer bara att innehålla en rad. HAVING satsen letar inom gruppen så att den kontrollerar att värdet på quantity är det maximala värdet inom den gruppen men det finns bara ett värde inom gruppen så detta kommer alltid att vara sant. Din fråga motsvarar:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Några andra sätt att få maxvärdet:

SQL-fiol

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;

Fråga 1 – Få en rad med maximal quantity och senaste item_no (med en tabellskanning) :

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

Resultat :

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

Fråga 2 – Få en rad med maximal quantity och senaste item_no (med en tabellskanning) :

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

Resultat :

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

Fråga 3 – Hämta alla rader med maximal quantity (med en tabellskanning) :

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

Resultat :

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

Fråga 4 – Hämta alla rader med maximal quantity (med två tabellskanningar) :

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

Resultat :

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


  1. Hur kan jag upptäcka redundanta rader i tabellen?

  2. Hur Access 2019 fungerar och hur du arbetar med det

  3. mySQL:Gå med i tre bord – hur?

  4. Hur genererar jag alla datum för söndag mellan 2 datum i oracle sql?