SQL: подсчет уникального пользователя для каждого указанного времени c - PullRequest
1 голос
/ 27 января 2020

У меня есть две таблицы (я назову Table A и Table B)

  • Table A показывает ежедневную сводку покупателей: для моего примера, клиент посетил магазин!
  • Table B показывает каждый элемент, который купил клиент: Каждый элемент детали!

Таблица A:

|Day         |Customer|
| -------   | ------- |
| 2020-01-01 | A |
| 2020-01-01 | B |
| 2020-01-02 | A |
| 2020-01-03 | A |
| 2020-01-03 | B |
| 2020-01-04 | A |
| 2020-01-04 | C |
| 2020-01-05 | D |
| 2020-01-05 | A |
| 2020-01-05 | B |
| 2020-01-06 | C |
| 2020-01-06 | D |

Таблица B:

|Day         | Customer| product  | campaign       |
| -------    | -------| -------   | -------        |
| 2020-01-01 |  A     |    11     | Campaign2020101|
| 2020-01-01 |  A     |    1      | NULL           |
| 2020-01-01 |  B     |    13     | Campaign2020101|
| 2020-01-02 |  A     |    15     | Campaign2020101|
| 2020-01-03 |  A     |    16     | Campaign2020101|
| 2020-01-04 |  A     |    17     | Campaign2020104|
| 2020-01-04 |  C     |    1      | NULL           |
| 2020-01-05 |  A     |    17     | Campaign2020104|
| 2020-01-05 |  B     |    1      | NULL           |
| 2020-01-05 |  D     |    1      | NULL           |
| 2020-01-06 |  C     |    19     | Campaign2020106|
| 2020-01-06 |  C     |    19     | Campaign2020106|
| 2020-01-06 |  D     |    19     | Campaign2020106|

Проблема заключается в поиске уникального количества клиентов кампании, сравниваемых с каждым уникальным клиентом, который посещает магазин! Таким образом, я могу найти уникального пользователя каждой кампании, потому что у меня есть уникальный идентификатор кампании (GROUP BY), но проблема в том, что я не могу разделить Table A Даты на основе дат кампании!

Пример:

  • Campaign202001:

    • Начинается 01.012020 и заканчивается 03.03 012020

    • Уникальный магазин визит 2 (клиент A и клиент B)

    • уникальный пользователь кампании 2 (клиент A и клиент B)

    • конверсия составляет 100%

  • Campaign2020104:

    • Начинается 04/01/2020, заканчивается, заканчивается 05.01.01 2020

    • Уникальное посещение магазина 4 (клиент A, B, C и D)

    • Уникальный пользователь кампании 1 (только Клиент A)

    • Конверсия 25%

Как найти уникальные посещения клиентов для каждого времени кампании?

Извините: я не смог сделать уникальный титул!

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Это немного сложно. Вам действительно нужна отдельная таблица campaigns с фактическими датами кампаний. Что делать, если на определенную дату нет покупок?

select c.campaign, c.num_campaign_customers,
       count(distinct v.customer) as total_customers,
       num_campaign_customers * 1.0 / count(distinct v.customer) as conversion_rate
from (select campaign, min(day) as min_day, max(day) as max_day,
             count(distinct customer) as num_campaign_customers
      from purchases p
      group by campaign
     ) c join
     visits v
     on v.day >= c.min_day and
        v.day <= c.max_day
group by c.campaign, c.num_campaign_customers;
0 голосов
/ 27 января 2020

Вы можете использовать следующий запрос. Он не очень оптимизирован, но вы можете использовать его в качестве отправной точки, а затем переработать его на основе ваших фактических данных:

with cp (sdate, edate) as
(select min(day) sdate,max(day) edate from b where campaign = 'Campaign2020104')
select count(distinct b.customer) visit,count(distinct purchase.customer) customer
from b, b as purchase,cp where b.day between cp.sdate and cp.edate
and purchase.day between cp.sdate and cp.edate and purchase.campaign is not null;

Вы можете проверить это здесь: http://sqlfiddle.com/#! 18 / 3303b / 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...