sql >> Database >  >> RDS >> Oracle

Hoe kan ik de eerste rij SELECTEREN met MAX (kolomwaarde)?

Waarom werkt je tweede vraag niet...

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

U groepeert op beide Item_No en Quantity en de Item_No lijkt de primaire sleutel te zijn en bevat unieke waarden, zodat elke groep slechts één rij bevat. De HAVING clausule kijkt binnen de groep, dus het zal controleren of de waarde van quantity is de maximale waarde binnen die groep, maar er is slechts één waarde binnen de groep, dus dit zal altijd waar zijn. Uw vraag is het equivalent van:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Enkele andere manieren om de maximale waarde te krijgen:

SQL Fiddle

Oracle 11g R2 Schema-instellingen :

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;

Query 1 - Krijg één rij met maximale quantity en laatste item_no (met behulp van 1 tabelscan) :

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

Resultaten :

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

Query 2 - Krijg één rij met maximale quantity en laatste item_no (met behulp van 1 tabelscan) :

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

Resultaten :

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

Query 3 - Krijg alle rijen met een maximum quantity (met behulp van 1 tabelscan) :

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

Resultaten :

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

Query 4 - Krijg alle rijen met een maximum quantity (met behulp van 2 tabelscans) :

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

Resultaten :

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


  1. Records uitsluiten als de rechtertabel overeenkomt

  2. JPA Mapping Multi-Rows met ElementCollection

  3. Niet-overlappende datum-tijd-gebeurtenissen ontwerpen

  4. MariaDB JSON_DEPTH() uitgelegd