Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnen Sie (sum,max,avg) kommagetrennte Spalte in mysql

Ich weiß nicht, welche Anwendung Sie entwerfen, aber ich denke, es war ein schlechtes Design, Werte durch Kommas getrennt zu speichern, anstatt Tabellendetails zu erstellen. Sie können dies lösen, ohne tatsächlich eine MySQL-Funktion zu verwenden. Zuerst müssen Sie convert comma separated columns into rows und dann kannst du etwas rechnen. Diese Abfrage kann Ihnen helfen :

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

Die Ergebnisse sollten wie folgt aussehen:

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