Tengo una tabla con una columna con valores de matriz (después de agrupar por y la función array_agg)
COLUMN_VALUE | other_columns... -----------: | -------: {0.45,0.45,0.97,0.99}| .. {0.45,0.45,0.85,0.99}| .. {0.45,0.45,0.77,0.99}| .. {0.45,0.45,0.10,0.99}| ..¿Cómo obtengo el valor más frecuente? (0,45 por cada fila para este caso)
Mi suposición es deshacer el anidamiento y agrupar nuevamente, pero estoy tratando de encontrar algo más robusto y rápido.
Consulta que estoy usando para construir la tabla.
select column1, column2, column3, array_agg(column4) as prices from tb where some conditions group by 1, 2, 3Puede obtener el valor más frecuente durante la agregación usando el agregado mode() :
select column1, column2, column3, array_agg(column4) as prices mode() within group (order by column4 desc) as most_frequent_price from tb where ... group by 1, 2, 3Puede usar unnest() y alguna lógica de agregación:
select t.*, m.mode from t cross join lateral (select el as mode from unnest(t.column_value) el group by el order by count(*) desc limit 1 ) m;Llamé a este modo porque ese es el término estadístico para el valor más común.