Есть таблица событий
created_at DATETIME
event_type STRING
# Some other columns with data about the event
Я хотел бы получить процент от общего количества событий в день за event_type
.
Итак, я сгруппировал события, чтобы получить количество событий в день:
# Lazily used date_bucket in GROUP BY since it's valid MySQL.
# Is that bad since it's not standard SQL?
#
SELECT
DATE(created_at) as date_bucket,
event_type,
COUNT(*) as number
FROM
example_table
GROUP BY
date_bucket, event_type
Если бы у нас были ряды
# Columns (date_bucket, event_type, number)
#
('2020-06-02', 'exampleG1', 5)
('2020-06-02', 'exampleG2', 10)
('2020-06-02', 'exampleG3', 20)
('2020-06-03', 'exampleG1', 10)
Я хотел бы иметь возможность получить что-то эквивалентное в обработке
# Columns (date_bucket, exampleG1, exampleG2, exampleG3)
#
('2020-06-02', 15/35, 10/35, 20/35)
('2020-06-03', 10/10, 0, 0)
Я не знаю отдельных значений event_type
заранее, и не все значения группы могут присутствовать во все дни, и в этом случае значение для этого типа должно быть 0 в этот день.
Я думал сделать какую-то операцию поворота, но, похоже, MySQL не поддерживает повороты, поэтому я немного не понимаю, как к этому подойти.
Если бы я заранее знал набор допустимых типов событий, я думаю, что мог бы сделать какой-нибудь неприятный подробный запрос о возможных типах, но набор является переменным.
Есть ли элегантный способ добиться этого?