sql >> Database >  >> RDS >> Oracle

De functie Max() gebruiken om groepswaarden te selecteren

Rangschik de records met ROW_NUMBER, zodat de maximale waarde voor een sku #1 wordt. Bewaar dan alleen die records die op nummer 1 staan.

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

Voor SKU 1503818 krijgt u een van deze twee:

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Als je een bepaalde wilt (bijvoorbeeld degene met het hogere artikelnummer), voeg dan dit criterium toe aan de ORDER BY-clausule van Row_Number.

Wat betreft de zoekopdracht die je zelf hebt geprobeerd:je zou in plaats daarvan moeten zoeken naar sku-waardeparen:

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

In het geval van een gelijkspel, zoals bij SKU 1503818, levert deze query u echter beide records op.



  1. Gegevens invoegen en verwijderen in PostgreSQL

  2. Oracle verwijdert geen cursors na het sluiten van de resultatenset

  3. Hoe Kubernetes te installeren met Kubeadm

  4. Converteer 'datetimeoffset' naar 'time' in SQL Server (T-SQL-voorbeelden)