Попытка найти количество клиентов и добавить продажи клиентов в зависимости от частоты их покупок на SQL - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь найти количество клиентов и объем продаж по количеству их покупок в 2019

txn_date Customer_ID  Transaction_Number    Sales        Reference(not in the SQL table)    
1/2/2019    1           12345                $10           First Purchase SLS
4/3/2019    1           65890                $20           Second Purchase SLS
3/22/2019   3           64453                $30           First Purchase SLS
4/3/2019    4           88567                $20           First Purchase SLS
1/23/2019   5           89464                $40           First Purchase SLS
4/3/2019    5           99674                $30           Second Purchase SLS
4/3/2019    6           32224                $20           First Purchase SLS
1/23/2019   6           46466                $30           Second Purchase SLS

Я пытаюсь получить следующий результат:

               Customer_Count   Transaction_Count   Sum(Sales)
1st Purchase        5                 5                 $120
2nd Purchase        3                 3                 $80

Я пробовал следующий запрос:

SELECT COUNT(DISTINCT INDIVIDUAL_ID),
CASE WHEN COUNT_OF_TRANSACTIONS = 1 THEN '1'
WHEN COUNT_OF_TRANSACTIONS = 2 THEN '2'
WHEN COUNT_OF_TRANSACTIONS = 3 THEN '3'
WHEN COUNT_OF_TRANSACTIONS = 4 THEN '4'
WHEN COUNT_OF_TRANSACTIONS  >= 5 THEN '5+' END AS TXN_TYPE,
SUM(DOLLAR_VALUE_US), 
SUM( COUNT_OF_TRANSACTIONS)

FROM customerorder

GROUP BY CASE WHEN COUNT_OF_TRANSACTIONS = 1 THEN '1'
WHEN COUNT_OF_TRANSACTIONS = 2 THEN '2'
WHEN COUNT_OF_TRANSACTIONS = 3 THEN '3'
WHEN COUNT_OF_TRANSACTIONS = 4 THEN '4'
WHEN COUNT_OF_TRANSACTIONS  >= 5 THEN '5+' END
ORDER BY 1 ASC;

Я хочу узнать количество клиентов и их продаж. Таким образом, для 1-й покупки клиентом будет любой, кто совершил хотя бы одну покупку и сумму продаж. Для второй покупки технически должны быть указаны все, кто совершил первую покупку, но только продажи из второй транзакции.

1 Ответ

0 голосов
/ 22 февраля 2020

Если я правильно понимаю, вы хотите перечислить заказы для каждого клиента и затем агрегировать:

select seqnum, count(*) as num_customers, sum(sales)
from (select co.*,
             row_number() over (partition by customer_id order by txn_date) as seqnum
      from customerorder co
     ) co
group by seqnum
order by seqnum;
...