sql >> Base de Datos >  >> RDS >> Mysql

Calcule (sum, max, avg) columna separada por comas en mysql

No sé qué aplicación está diseñando, pero creo que fue un mal diseño almacenar valores separados por comas en lugar de crear una tabla de detalles. Puede resolver esto sin usar una función mysql en realidad. Primero, debe convert comma separated columns into rows y luego puedes hacer algunos cálculos. Esta consulta puede ayudarte:

select id,max(val) as max,min(val) as min,sum(val) as sum,avg(val) as avg
from(
    select id,(substring_index(substring_index(t.poin, ',', n.n), ',', -1)) val
        from poin_dtl t cross join(
         select a.n + b.n * 10 + 1 n
         from 
            (select 0 as n union all select 1 union all select 2 union all select 3 
                union all select 4 union all select 5 union all select 6 
                union all select 7 union all select 8 union all select 9) a,
            (select 0 as n union all select 1 union all select 2 union all select 3 
                union all select 4 union all select 5 union all select 6 
                union all select 7 union all select 8 union all select 9) b
            order by n 
        ) n <-- To make this simple, Create a table with one column that has 100 rows.
    where n.n <= 1 + (length(t.poin) - length(replace(t.poin, ',', '')))
    order by val asc
) as c_rows -- c_rows = convert comma separated columns into rows
group by id

Los resultados deberían ser así:

id     max     min      sum      avg
--------------------------------------
1      1       9        23        4,6
2      8       2        19        4,75
3      9       1        33        5,5