Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Operasi mirip pivot MySQL untuk mendapatkan perincian persentase total acara per hari per jenis acara

Anda meminta SQL dinamis. Artinya, buat string kueri secara dinamis dari kueri lain yang mencantumkan event_type distinct yang berbeda nilai, lalu jalankan. Di MySQL, ini diimplementasikan menggunakan pernyataan yang telah disiapkan.

Begini caranya:

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; 

Untuk data sampel Anda, ini menghasilkan kueri berikut:

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

Dan hasilnya sebagai berikut:

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

Demo di 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. Mengubah hitungan saat ini dari nilai Kenaikan Otomatis di MySQL?

  2. Tabel MySQL Besar

  3. MYSQL Buang hanya baris tertentu

  4. Bagaimana saya bisa memeriksa pernyataan SQL (Saya) untuk kebenaran sintaksis?

  5. Bagaimana cara mengambil Input dari Kotak Teks yang Dibuat Secara Dinamis di php dan menyimpannya di MySQL menggunakan loop?