sql >> Database teknologi >  >> RDS >> Mysql

Beregn (sum, maks, gennemsnit) kommasepareret kolonne i mysql

Jeg ved ikke, hvilken applikation du designer, men jeg synes, det var dårligt design at gemme værdier i kommasepareret i stedet for at oprette en tabeldetaljer. Du kan løse dette uden at bruge en mysql-funktion faktisk. Først skal du convert comma separated columns into rows og så kan du regne ud. Denne forespørgsel kan hjælpe dig :

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

Resultaterne skulle være sådan her:

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



  1. ODBC-forespørgsel på MS SQL Server returnerer kun de første 255 tegn i PHP PDO (FreeTDS)

  2. Oracle-partition efter nøgleord

  3. glassfish 4 &MySQL &JSTL

  4. Dataanalyse vs. datavidenskab:Hvad er forskellen?