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

Używanie funkcji Max() do wybierania wartości grup

Uporządkuj rekordy za pomocą ROW_NUMBER, aby maksymalna wartość jednostki sku wynosiła #1. Następnie zachowaj tylko te rekordy na 1. pozycji.

select sku, item, value
from
(
  select 
    mytable.*
    row_number() over (partition by sku order by value desc) as rn
  from mytable
)
where rn = 1;

Za SKU 1503818 otrzymasz jeden z tych dwóch:

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Jeśli chcesz konkretny (np. ten o wyższym numerze pozycji), dodaj to kryterium do klauzuli ORDER BY wiersza_Number.

Jeśli chodzi o zapytanie, które sam spróbowałeś:Zamiast tego powinieneś szukać par wartości sku:

select SKU, ITEM, VALUE from import
where (sku,value) in (select sku, max(value) from import group by sku);

Jednak w przypadku remisu, tak jak w przypadku SKU 1503818, to zapytanie dostarczy oba rekordy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy ODP.NET jest wymagany dla klienta Oracle 11g?

  2. Wygeneruj losową datę w Oracle za pomocą DBMS_RANDOM

  3. Zupełnie nowa baza danych produkcyjnych

  4. Wpisz podzapytania ORM

  5. Jak zmienić domyślny format nls_date_format dla klienta Oracle jdbc?