आप गतिशील एसक्यूएल के लिए पूछ रहे हैं। अर्थात्, किसी अन्य क्वेरी से गतिशील रूप से क्वेरी स्ट्रिंग का निर्माण करें जो अलग event_type
. को सूचीबद्ध करती है मान, फिर इसे निष्पादित करें। MySQL में, इसे तैयार कथनों का उपयोग करके कार्यान्वित किया जाता है।
यह कैसे करना है:
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;
आपके नमूना डेटा के लिए, यह निम्न क्वेरी उत्पन्न करता है:
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
और निम्न परिणाम:
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