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

Rozkład liczby zamówień na klienta SQL

Object Storage Arubacloud
0 głosów
392 wizyt
pytanie zadane 15 lutego 2023 w SQL, bazy danych przez Blds Użytkownik (830 p.)
edycja 15 lutego 2023 przez Blds

Próbuję napisać kod żeby wyciągnąć rozkład liczby zamówień na klienta. Kod wygląda mniej więcej tak:

SELECT liczba_zamowien, 
             count(*) as liczba_klientow
FROM
(SELECT      c.customer_id,
                    count(o.order_id) as liczba_zamowien
FROM         customer c
INNER JOIN order o on o.customer_id = c.customer_id 
GROUP BY 1) a
GROUP BY liczba_zamowien

Jeżeli robię wewnętrznego selecta to mam tylko jednego klient z największa iloscia zamówien 22 .

Gdy zrobię zewnetrznego selecta, którym chcę policzyć ile razy wystąpiła dana ilość to nagle pojawiają sie dwa rekordy z ilosciami, których wcześniej nie było (28 i 42) gdzie robię błąd?

1
komentarz 15 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Daj definicje tabel i zdefiniuj co rozumiesz przez "rozkład"
komentarz 15 lutego 2023 przez Blds Użytkownik (830 p.)
Chciałbym wyciągnąć ilość zamówień na klienta wewnętrznym zapytaniem, a zewnętrznym ile razy dana ilość zamówień się powtórzyła. Co potrzebujesz jeśli chodzi o definicje tabel?

Tabela customer zawiera wszystkich klientów, tabela order wszystkie zamówienia
komentarz 15 lutego 2023 przez Blds Użytkownik (830 p.)
generalnie w zapytaniu jest jeszcze łączenie z 3 tabelami więc nie wiem czy wymienianie pol coś da. W każdym razie zauwazyłem ze we wklejonym kodzie zrobiłem błąd bo łączenie customer z order odbywa się po customer_id (już poprawłem).

Kolejną zagwozdką jest, że w jednym order_id moze być kilka pozycji (np. kilka ksiazek w jednym zamwieniu). W tabeli order występuje raz (kolumna positions mowi o ilosci pozycji), ale w tabeli order_specific każde zamówienie (order_id) występuje tyle razy ile jest pozycji. Dlaczego gdy selectuje customer_id i order_id z tabeli order to mimo jednej pozycji w tabeli order pokaze mi tyle ile w tabeli order_specific.Chciałbym wyciągnąć ilość zamówień na klienta wewnętrznym zapytaniem, a zewnętrznym ile razy dana ilość zamówień się powtórzyła. Co potrzebujesz jeśli chodzi o definicje tabel?

Tabela customer zawiera wszystkich klientów, tabela order wszystkie zamówienia

1 odpowiedź

+1 głos
odpowiedź 15 lutego 2023 przez tangarr Mędrzec (154,860 p.)

Jeżeli tabela orders zawiera pole jednoznacznie określające klienta to nie ma potrzeby łączyć tej tabeli z innymi
Wewnętrzny select może wyglądać tak:

SELECT customer_id, count(*) as liczba_zamowien FROM order GROUP BY customer_id;

 

Podobne pytania

0 głosów
1 odpowiedź 179 wizyt
pytanie zadane 27 maja 2021 w Systemy operacyjne, programy przez Bartas1401 Nowicjusz (120 p.)
+1 głos
0 odpowiedzi 2,099 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez swagimir Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 252 wizyt

92,568 zapytań

141,422 odpowiedzi

319,641 komentarzy

61,957 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...