Jednoczesne wyjęcie z bazy ilości zamówień oraz sumy zamówień.

0

Witam serdecznie.

Z bazy zamówień o podanej w załączniku strukturze chciałbym wyjąć jednoczenie imię i nazwisko klienta, ilość oraz sumę zamówień.

Niestety takie zapytanie:

SELECT COUNT(zamowienia.IDKlienta) as ilosc,
       klienci.ImieKlienta, 
       klienci.NazwiskoKlienta, 
       sum(dane_zamowien.CenaZakupu*dane_zamowien.ZamowionaIlosc) as suma
from zamowienia 
join dane_zamowien on zamowienia.NumerZamowienia=dane_zamowien.NumerZamowienia
join klienci on klienci.IDKlienta=zamowienia.IDKlienta
GROUP by zamowienia.IDKlienta;

Zawraca błędną ilość zamówień. Przez zastosowanie joina do tabeli dane_zamówień, którego muszę użyć aby obliczyć wartość wszystkich zamówień klienta, ich ilość liczona jest właśnie z tej tabeli, a nie z tabeli zamówienia.
Jakaś podpowiedź jak można rozwiązać takie zapytanie? struktura.png

0

Count(*) powinno Ci dać to co potrzebijesz.

0
S4t napisał(a):

Count(*) powinno Ci dać to co potrzebijesz.

Dzięki za odpowiedź, ale niestety nie pomogło :(

1

To policz distinct id zamówienia.

0
S4t napisał(a):

To pilicz distinct id zamówienia.

SELECT COUNT(DISTINCT zamowienia.NumerZamowienia) as ilosc,
       klienci.ImieKlienta, 
       klienci.NazwiskoKlienta, 
       sum(dane_zamowien.CenaZakupu*dane_zamowien.ZamowionaIlosc) as suma
from zamowienia 
join dane_zamowien on zamowienia.NumerZamowienia=dane_zamowien.NumerZamowienia
join klienci on klienci.IDKlienta=zamowienia.IDKlienta
GROUP by zamowienia.IDKlienta;

Również nie zwraca właściwych wyników. W bazie są 944 zamówienia, tak wykonane zapytanie w sumie, po policzeniu zwraca ich 933

0

To może masz zamówienia które nie mają danych

0
damian stelmach napisał(a):
S4t napisał(a):

To pilicz distinct id zamówienia.

SELECT COUNT(DISTINCT zamowienia.NumerZamowienia) as ilosc,
       klienci.ImieKlienta, 
       klienci.NazwiskoKlienta, 
       sum(dane_zamowien.CenaZakupu*dane_zamowien.ZamowionaIlosc) as suma
from zamowienia 
join dane_zamowien on zamowienia.NumerZamowienia=dane_zamowien.NumerZamowienia
join klienci on klienci.IDKlienta=zamowienia.IDKlienta
GROUP by zamowienia.IDKlienta;

Również nie zwraca właściwych wyników. W bazie są 944 zamówienia, tak wykonane zapytanie w sumie, po policzeniu zwraca ich 933

Sprawdziłem, nie ma takich zamówień.
Zapytanie:

SELECT klienci.IDKlienta, klienci.ImieKlienta, klienci.NazwiskoKlienta, COUNT(zamowienia.IDKlienta) as ile
from zamowienia join klienci on zamowienia.IDKlienta=klienci.IDKlienta
GROUP by klienci.IDKlienta;

zwraca w sumie, po podliczeniu 944 zamówienia, natomiast to, które podałem wyżej, z zaproponowaną przez Ciebie zmianą tylko 933.

0

A a ile ci zwraca

select count(*) from (select dane_zamowien.NumerZamowienia from dane_zamowien group by  dane_zamowien.NumerZamowienia)

0
S4t napisał(a):

A a ile ci zwraca

select count(*) from (select dane_zamowien.NumerZamowienia from dane_zamowien group by  dane_zamowien.NumerZamowienia)

Z tego co pamiętam MySQL nie przyjmuje podzapytania w klauzuli from, a przynajmniej tak wykonane zapytania zwraca błąd składni. Po lekkiej modyfikacji wyszło jednak 933. Sprawdziłem też ROW_NUMBER czy ilość numerów zamówień w tabeli dane_zamowien równa jest wynikowi ROW_NUMBER i faktycznie okazało się, że są zamówienia bez powiązania w tablicy dane_zamowień.
Podsumowując, działa takie zapytanie:

SELECT COUNT(DISTINCT zamowienia.NumerZamowienia) as ilosc,
       klienci.ImieKlienta, 
       klienci.NazwiskoKlienta, 
       sum(dane_zamowien.CenaZakupu*dane_zamowien.ZamowionaIlosc) as suma
from zamowienia 
join dane_zamowien on zamowienia.NumerZamowienia=dane_zamowien.NumerZamowienia
join klienci on klienci.IDKlienta=zamowienia.IDKlienta
GROUP by zamowienia.IDKlienta;

Dziękuje za pomoc. Pozdrawiam, Damian.

1 użytkowników online, w tym zalogowanych: 0, gości: 1