У меня есть таблица, в которой записываются события, касающиеся кампаний по электронной почте. Я хочу выяснить процентную долю кампаний, в которых было проведено более одного события.
Сначала я рассчитал количество событий, происходящих в каждой кампании:
select count(*) as counter
from campaigns_log
where event IN ('send', 'open')
and campaign_id is not null
group by campaign_id, email
Затем ясгруппировали кампании по условию, произошло ли более одного события:
select count(counter) as occurences, IF(counter > 1, 2, 1) as grouper
from (select count(*) as counter
from campaigns_log
where event IN ('send', 'open')
and campaign_id is not null
group by campaign_id, email) as counters_table
group by grouper
Образец результата:
occurences ¦ grouper
132 ¦ 1
360 ¦ 2
Теперь я хочу рассчитать для каждой строки процент от общего числа вхождений. Итак, что-то вроде этого:
occurences ¦ grouper ¦ percentage
132 ¦ 1 ¦ 132/(132+360)
360 ¦ 2 ¦ 360/(132+360)
Я пробовал это, но это не работает, он не рассчитывает общую сумму:
select *, occurences/(select sum(occurences))
from (
select count(counter) as occurences, IF(counter > 1, 2, 1) as grouper
from (select count(*) as counter
from campaigns_log
where event IN ('send', 'open')
and campaign_id is not null
group by campaign_id, email) as counters_table
group by grouper
) as occurences_table group by occurences, grouper
Любая идея, где моя ошибка впоследний шаг?