• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SQL rejestracje i zamówienia

+2 głosów
487 wizyt
pytanie zadane 29 marca 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)

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

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 282 wizyt
0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 16 listopada 2016 w SQL, bazy danych przez ShiroUmizake Nałogowiec (46,300 p.)
0 głosów
1 odpowiedź 192 wizyt

93,741 zapytań

142,677 odpowiedzi

323,294 komentarzy

63,323 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...