Tôi không biết bạn đang thiết kế ứng dụng gì, nhưng tôi nghĩ rằng đó là thiết kế tồi khi lưu trữ các giá trị được phân tách bằng dấu phẩy thay vì tạo chi tiết bảng. Bạn có thể giải quyết vấn đề này mà không cần sử dụng hàm mysql. Trước tiên, bạn cần convert comma separated columns into rows
và sau đó bạn có thể thực hiện một số phép tính. Truy vấn này có thể giúp bạn:
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
Kết quả sẽ như thế này:
id max min sum avg
--------------------------------------
1 1 9 23 4,6
2 8 2 19 4,75
3 9 1 33 5,5