Oracle
 sql >> Base de données >  >> RDS >> Oracle

Utilisation de la fonction Max() pour sélectionner des valeurs de groupe

Classez les enregistrements avec ROW_NUMBER, de sorte que la valeur maximale d'un sku obtienne #1. Ne conservez ensuite que les enregistrements classés n°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;

Pour le SKU 1503818, vous obtiendrez l'un de ces deux :

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Si vous en voulez un en particulier (par exemple celui avec le numéro d'article le plus élevé), ajoutez ce critère à la clause ORDER BY de Row_Number.

Quant à la requête que vous avez essayée vous-même :vous devriez plutôt rechercher des paires sku-valeur :

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

En cas d'égalité, comme avec le SKU 1503818, cette requête vous donnera cependant les deux enregistrements.