Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak mogę WYBRAĆ pierwszy wiersz z MAX (wartość kolumny)?

Dlaczego drugie zapytanie nie działa...

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

Grupujesz według Item_No i Quantity i Item_No wydaje się być kluczem podstawowym i zawiera unikalne wartości, więc każda grupa będzie zawierać tylko jeden wiersz. HAVING klauzula szuka w grupie, więc sprawdzi, czy wartość quantity to maksymalna wartość w tej grupie, ale w grupie jest tylko jedna wartość, więc zawsze będzie to prawda. Twoje zapytanie jest odpowiednikiem:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Kilka innych sposobów na uzyskanie maksymalnej wartości:

Skrzypce SQL

Konfiguracja schematu 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;

Zapytanie 1 – Uzyskaj jeden wiersz z maksymalną quantity i najnowszy item_no (przy użyciu 1 skanu tabeli) :

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

Wyniki :

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

Zapytanie 2 – Uzyskaj jeden wiersz z maksymalną quantity i najnowszy item_no (przy użyciu 1 skanu tabeli) :

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

Wyniki :

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

Zapytanie 3 – Pobierz wszystkie wiersze z maksymalną quantity (przy użyciu 1 skanu tabeli) :

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

Wyniki :

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

Zapytanie 4 – Pobierz wszystkie wiersze z maksymalną quantity (przy użyciu 2 skanów tabeli) :

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

Wyniki :

| 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. OracleCommand z OracleDependency czeka wiecznie

  2. Rozwiązywanie problemów z błędem Oracle Form Builder FRM-10044

  3. java.sql.SQLException:ORA-01002:pobieranie poza kolejnością

  4. Czy procedura SQL może zwrócić tabelę?

  5. Procedura składowana wywołań PHP-OCI z parametrami