Mysql
 sql >> база данни >  >> RDS >> Mysql

Операция, подобна на MySQL, за да получите разбивка на процента от общите събития на ден по тип събитие

Искате динамичен SQL. Тоест, динамично изградете низа на заявката от друга заявка, която изброява различни 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

Демо на 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. MySQL - Таблица 'my_table' не беше заключена със заключващи таблици

  2. Част 1:jQuery -> MySQL -> jQuery -> HTML

  3. Архивиране на MySQL схема с ограничения на таблицата с външни ключове

  4. Заключване на MySQL INNODB ред в PHP

  5. Mysql:Създаване на вградена таблица в оператора за избор?