sql >> Databáze >  >> RDS >> Mysql

Vypočítejte (sum,max,avg) čárkami oddělený sloupec v mysql

Nevím, jakou aplikaci navrhujete, ale myslím, že byl špatný návrh ukládat hodnoty oddělené čárkami místo vytvoření podrobností tabulky. Ve skutečnosti to můžete vyřešit bez použití funkce mysql. Nejprve musíte convert comma separated columns into rows a pak můžete provést nějaký výpočet. Tento dotaz vám může pomoci:

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

Výsledky by měly být následující:

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



  1. Jak zabránit aktualizacím tabulky, s výjimkou pro jednu situaci

  2. php kód pro generování více řádků s vlastním kódem

  3. PHP:Zobrazit dialog pro potvrzení ano/ne

  4. MYSQL do outfile přístup odepřen - ale můj uživatel má VŠECHNY přístup.. a složka je CHMOD 777