• 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

0 głosów
955 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 (155,140 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 (155,140 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ź 391 wizyt
pytanie zadane 27 maja 2021 w Systemy operacyjne, programy przez Bartas1401 Nowicjusz (120 p.)
+1 głos
0 odpowiedzi 2,829 wizyt
pytanie zadane 22 marca 2017 w SQL, bazy danych przez swagimir Nowicjusz (190 p.)
0 głosów
3 odpowiedzi 498 wizyt

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 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.

...