Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Operacja typu Pivot MySQL, aby uzyskać podział procentu wszystkich zdarzeń dziennie według typu zdarzenia

Pytasz o dynamiczny SQL. Oznacza to, że dynamicznie zbuduj ciąg zapytania z innego zapytania, które zawiera różne event_type wartości, a następnie wykonaj je. W MySQL jest to zaimplementowane za pomocą przygotowanych instrukcji.

Oto jak to zrobić:

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; 

W przypadku przykładowych danych generuje to następujące zapytanie:

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

I następujący wynik:

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 na 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. Wynik zapytania mysql do tablicy php

  2. eclipse - jednostki JPA z tabel, brak wymienionych schematów

  3. Naruszenie ograniczeń php Błąd 1452

  4. Laravel Eloquent zapytanie JSON kolumna z Where In?

  5. Parametr thread_stack serwera MySQL - co to jest? Jak duży powinien być?