Potrzebuję wyciągnąć customer_id zarejestrowanych w tym roku z tabeli customer, oraz zliczyć dla nich liczbę zamówień w poszczególnych miesiącach i w poszczególnych przedziałach czyli np,
liczba zamowien |
klienci zarejestrowani w styczniu |
klienci zarejestrowani w lutym |
1-3 |
|
|
3-7 |
|
|
Na razie mam dwa osobne selecty dla liczby zarejestrowanych klientów i klientów w poszczególnych przedziałach zamówien. Brakuje mi pomysłu jak to teraz połączyć i jaki dać warunek, żeby sprawdzał czy zamówienie odbyła się w tym samym miesiącu co rejestracja.
# rejestracje
SELECT
sum(case when month (c.time_create) = 1 then 1 end) styczen,
sum(case when month (c.time_create) = 2 then 1 end) luty,
sum(case when month (c.time_create) = 3 then 1 end) marzec
FROM customer as c
INNER JOIN order as o on c.customer_id = o.customer_id
WHERE c.time_create >= '2023-01-01'
AND MONTH (c.time_create) = MONTH (o.time_create)
AND YEAR (c.time_create) = YEAR (o.time_create)
i drugi select dla przedziałów zamówień
SELECT case
when paczki = 0 then '0'
when paczki >= 1 and paczki <= 2 then '1-2'
when paczki >= 3 and paczki <= 6 then '3-6'
when paczki >= 7 and paczki <= 15 then '7-15'
when paczki >= 16 and paczki <= 25 then '16-25'
else 'wiecej' end paczki,
count(*) 'liczba klientów'
FROM (select extract(MONTH FROM o.time_create) miesiac,
o.customer_id,
count(*) paczki
from order as o
inner join customer as c on c.customer_id = o.customer_id
where c.time_create >= '2023-01-01'
AND MONTH(c.time_create) = MONTH(o.time_create)
AND YEAR(c.time_create) = YEAR(o.time_create)
GROUP BY 1, 2) as a
GROUP BY 1