sql >> Databáze >  >> RDS >> Oracle

Jak mohu VYBRAT první řádek s MAX (hodnota sloupce)?

Proč váš druhý dotaz nefunguje...

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

Seskupujete se podle Item_No a Quantity a Item_No se zdá být primárním klíčem a obsahuje jedinečné hodnoty, takže každá skupina bude obsahovat pouze jeden řádek. HAVING klauzule hledá ve skupině, takže zkontroluje, že hodnota quantity je maximální hodnota v této skupině, ale ve skupině je pouze jedna hodnota, takže to bude vždy pravda. Váš dotaz je ekvivalentem:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Některé další způsoby, jak získat maximální hodnotu:

SQL Fiddle

Nastavení schématu 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;

Dotaz 1 – Získejte jeden řádek s maximálním quantity a nejnovější item_no (pomocí 1 skenu tabulky) :

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

Výsledky :

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

Dotaz 2 – Získejte jeden řádek s maximálním quantity a nejnovější item_no (pomocí 1 skenu tabulky) :

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

Výsledky :

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

Dotaz 3 – Získejte všechny řádky s maximálním quantity (pomocí 1 skenu tabulky) :

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

Výsledky :

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

Dotaz 4 – Získejte všechny řádky s maximálním quantity (pomocí 2 skenů tabulky) :

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

Výsledky :

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


  1. Regulární výrazy uvnitř SQL Serveru

  2. ignorování fulltextových ignorovaných slov mysql v dotazu

  3. Jak TAN() funguje v MariaDB

  4. Vývoj odolnosti vůči chybám v PostgreSQL:Cestování časem