Как мне посчитать клиентов, которые сделали больше, чем покупка? - PullRequest
0 голосов
/ 10 января 2020

У меня есть таблица с именем order, которая выглядит следующим образом:

enter image description here

Я пытаюсь отобразить:

1.Всего количество покупателей, купивших только 1 раз (которые ходили в магазин за один раз, могло случиться так, что они купили несколько товаров, но это только один раз)

2. Общее количество клиентов, купивших больше чем 1 раз (это было в магазине более чем один раз)

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

ВЫБРАТЬ СЧЕТ (отличный идентификатор клиента)

ОТ заказов AS c

ГДЕ (ВЫБЕРИТЕ СЧЕТЧИК (отличный идентификатор транзакции)

FROM orders as b

WHERE

    b.customer_id = c.customer_id) =1 

, и я заменяю последнюю строку на> 1 для клиентов, совершивших покупки более одного раза

Любой помощь заранее приветствуется

1 Ответ

1 голос
/ 10 января 2020

Вы можете использовать два уровня агрегации: сначала посчитайте количество посещений на одного клиента (ie на сколько разных дней у них была хотя бы одна транзакция), а затем проверьте, сколько клиентов совершило 1 посещение. и сколько было больше.

select
    sum(case when cnt_visits = 1 then 1 else 0 end) customers_with_1_visit,
    sum(case when cnt_visits = 1 then 0 else 1 end) customers_with_more_visits
from (
    select customer_id, count(distinct cast(transaction_date as date)) cnt_visits
    from mytable
    group by customer_id
) t

Используется cast(... as date) для обрезки временной части даты транзакции. В зависимости от вашей базы данных могут быть доступны другие варианты.

...