sql >> Base de Datos >  >> RDS >> Oracle

Uso de la función Max() para seleccionar valores de grupo

Clasifique los registros con ROW_NUMBER, de modo que el valor máximo para un sku sea el #1. Luego mantenga solo esos registros clasificados 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 SKU 1503818 obtendrá cualquiera de estos dos:

1503818 1636708 0,9440251
1503818 1636709 0,9440251

Si desea uno en particular (por ejemplo, el que tiene el número de artículo más alto), agregue este criterio a la cláusula ORDER BY de Row_Number.

En cuanto a la consulta que probó usted mismo:debería buscar pares de valores de sku en su lugar:

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

Sin embargo, en caso de empate, como con el SKU 1503818, esta consulta obtendrá ambos registros.