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

Calculer (somme, max, moyenne) colonne séparée par des virgules dans mysql

Je ne sais pas quelle application vous concevez, mais je pense que c'était une mauvaise conception de stocker des valeurs séparées par des virgules au lieu de créer des détails de table. Vous pouvez résoudre ce problème sans utiliser de fonction mysql. Tout d'abord, vous devez convert comma separated columns into rows et puis vous pouvez faire un calcul. Cette requête peut vous aider :

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

Les résultats devraient ressembler à ceci :

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