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

Hoạt động giống như trục xoay MySQL để nhận phân tích phần trăm tổng số sự kiện mỗi ngày cho mỗi loại sự kiện

Bạn đang yêu cầu SQL động. Nghĩa là, tự động tạo chuỗi truy vấn từ một truy vấn khác liệt kê event_type riêng biệt giá trị, sau đó thực thi nó. Trong MySQL, điều này được thực hiện bằng cách sử dụng các câu lệnh đã chuẩn bị sẵn.

Đây là cách thực hiện:

select @sql := group_concat(distinct
    'sum(case when event_type = ''', 
    event_type, ''' then number else 0 end)/sum(number) as `ratio_', 
    event_type, '`'
) 
from example_table;

set @sql = concat(
    'select date(created_at) date_bucket, ', 
    @sql, 
    ' from example_table group by date(created_at) order by date_bucket'
);

-- debug
select @sql;

-- execute
prepare stmt from @sql;
execute stmt;
deallocate prepare stmt; 

Đối với dữ liệu mẫu của bạn, điều này tạo ra truy vấn sau:

select 
    date(created_at) date_bucket, 
    sum(case when event_type = 'exampleG1' then number else 0 end)/sum(number) as `ratio_exampleG1`,
    sum(case when event_type = 'exampleG2' then number else 0 end)/sum(number) as `ratio_exampleG2`,
    sum(case when event_type = 'exampleG3' then number else 0 end)/sum(number) as `ratio_exampleG3` 
from example_table 
group by date(created_at) 
order by date_bucket

Và kết quả sau:

date_bucket | ratio_exampleG1 | ratio_exampleG2 | ratio_exampleG3
:---------- | --------------: | --------------: | --------------:
2020-06-02  |          0.1429 |          0.2857 |          0.5714
2020-06-03  |          1.0000 |          0.0000 |          0.0000

Bản trình diễn trên DB Fiddle




  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ách tốt nhất để triển khai kiến ​​trúc cơ sở dữ liệu Máy khách <-> Máy chủ <-> trong ứng dụng Android?

  2. MySQL trục xoay động

  3. 4 cách liệt kê tất cả các bảng trong cơ sở dữ liệu MySQL

  4. Thực hiện một đăng nhập duy nhất cho ba trang web trong PHP?

  5. Truy vấn MYSQL trả về 'id tài nguyên # 12 thay vì giá trị số mà nó sẽ trả về