Условное Соглашение для пронумерованных государств - PullRequest
3 голосов
/ 23 февраля 2020

Мне трудно обернуть голову вокруг SQL Запроса. Я думаю, что каким-то образом условное агрегирование может быть использовано, но вот моя ситуация:

У меня есть следующая таблица:

+------------+----------+--------------+-------------+------------------+
| Email_Name | Email_Id | Subject_Line | Customer_Id | Interaction_Type |
+------------+----------+--------------+-------------+------------------+
| Email1     |        1 | Hello_1      |           1 | SENT             |
| Email2     |        1 | Hello_1      |           2 | SENT             |
| Email3     |        1 | Hello_1      |           3 | OPEN             |
| Email4     |        1 | Hello_1      |           4 | OPEN             |
| Email5     |        1 | Hello_1      |           5 | CLICK            |
| Email6     |        1 | Hello_1      |           6 | SENT             |
+------------+----------+--------------+-------------+------------------+

Обычно входные данные упорядочены по идентификатору клиента, например, электронное письмо, отправленное 100 людям, будет отображаться 100 раз (по идентификатору клиента). Если открыто 50 электронных писем, у меня будет еще 50 строк электронного письма с состоянием ОТКРЫТО и т. Д.

Я хочу объединить данные, чтобы у меня была одна строка для каждого идентификатора электронной почты, за которой следовал 3 столбца ОТКРЫТЬ / ОТПРАВЛЕНО / НАЖМИТЕ с цифрами, указывающими, сколько раз оно было отправлено / открыто / кликнуто.

Можно ли это сделать? Использование MySql. Спасибо, любезно.

Ответы [ 2 ]

1 голос
/ 23 февраля 2020

Вы хотите условную агрегацию.

Это работает, группируя набор данных по email_name, а затем выполняя условные sum с для каждого из interaction_type с, например:

select 
    email_name,
    sum(interaction_type = 'SENT') sent,
    sum(interaction_type = 'OPEN') open,
    sum(interaction_type = 'CLICK') click
from mytable
group by email_name

В MySQL условные выражения при оценке в контексте числового значения c дают 1 при выполнении и 0 при отсутствии. Таким образом, выражение типа sum(interaction_type = 'SENT') увеличивается на 1 для каждой записи, где interaction_type = 'SENT'.

1 голос
/ 23 февраля 2020

Условное агрегирование:

select email_id, 
       sum(Interaction_Type = 'SENT') as num_sent,
       sum(Interaction_Type = 'OPEN') as num_open,
       sum(Interaction_Type = 'CLICK') as num_click
from t
group by email_id;
...