Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán (tổng, tối đa, trung bình) cột được phân tách bằng dấu phẩy trong mysql

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có cần thiết phải có một chỉ mục trên mọi tổ hợp các trường có thể truy vấn trong bảng SQL để tối ưu hóa hiệu suất không?

  2. Phân tích cú pháp JSON thành mySQL

  3. Thứ tự theo nhóm trong Doctrine 2

  4. MySQL Fulltext Boolean Mode tìm kiếm trả về quá nhiều kết quả

  5. Lỗi với PreparedStatement