Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden der Funktion Max() zum Auswählen von Gruppenwerten

Ordnen Sie die Datensätze mit ROW_NUMBER, sodass der maximale Wert für eine SKU #1 erhält. Behalte dann nur die Rekorde auf Platz 1.

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

Für SKU 1503818 erhalten Sie eine dieser beiden:

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Wenn Sie eine bestimmte wünschen (z. B. die mit der höheren Artikelnummer), fügen Sie dieses Kriterium der ORDER BY-Klausel von Row_Number hinzu.

Zu der von Ihnen selbst versuchten Abfrage:Sie sollten stattdessen nach Sku-Wert-Paaren suchen:

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

Im Falle eines Gleichstands, wie bei SKU 1503818, erhalten Sie mit dieser Abfrage jedoch beide Datensätze.