Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Usando a função Max() para selecionar valores de grupo


Classifique os registros com ROW_NUMBER, para que o valor máximo de um sku seja #1. Em seguida, mantenha apenas os registros classificados como #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;

Para o SKU 1503818, você obterá um destes dois:
1503818 1636708 0,9440251
1503818 1636709 0,9440251

Se você quiser um em particular (por exemplo, aquele com o número de item mais alto), adicione esse critério à cláusula ORDER BY de Row_Number.

Quanto à consulta que você tentou:você deve procurar pares de valores sku:
select SKU, ITEM, VALUE from import
where (sku,value) in (select sku, max(value) from import group by sku);

No entanto, em caso de empate, como no SKU 1503818, essa consulta obterá os dois registros.