318 PHP i MySQL dla każdego
Wartość zamówień może być również sumowana za pomocą funkcji SUM. Kiedy interesuje nas zatem sumaryczna wartość zamówień złożonych przez klienta o identyfikatorze 2, zastosujemy zapytanie w postaci:
SELECT SUM(Wartość) AS Suma FROM Zamówienia WHERE Klient Id = 2;
W dotychczasowych przykładach funkcje agregujące wykorzystywaliśmy do zebrania informacji statystycznych według jednego kryterium, czyli np. liczby zamówień czy średniej wartości zamówienia jednego klienta. Co jednak zrobić w sytuacji, kiedy interesuje nas np. całkowita liczba zamówień każdego z klientów? Można by wykonać serię zapytań, ale to z pewnością nie byłoby wygodne. Dlatego też język SQL udostępnia klauzulę grupującą GROUP BY. Schematyczne zapytanie SQL zawierające klauzulę GROUP BY ma postać:
SELECT kol umaił. kolumna2.....kolumnaN']
FROM tabelalł. tabela2.....tabelaN]
WHERE warunki
GRUP BY kolumnal[. kolumna2.....kolumnaN]
Wyniki zapytania zostaną wtedy zgrupowane względem wskazanych kolumn. Zobaczmy, jak będzie wyglądało działanie takiej konstrukcji na konkretnym przykładzie. Załóżmy, że interesuje nas całkowita liczba zamówień, jakie zostały złożone przez każdego klienta. Będziemy oczywiście operować na przedstawionej w poprzedniej sekcji tabeli Zamówienia. Aby uzyskać tak określoną informację, należy wykonać zapytanie w postaci:
SELECT Klientld. COUNTt*) AS 'Liczba Zamówień'
FROM Zamówienia GROUP BY Klientld:
Wynik tego zapytania został przedstawiony na rysunku 11.11. Widać wyraźnie, że klient o identyfikatorze 1 złożył 3 zamówienia, klient o identyfikatorze 2 — 2 zamówienia itd.
Rysunek 11.11.
Pobranie całkowitej liczby zamówień dla każdego klienta
mysq1> SELECT Klientld, COUNT(*) AS ‘Liczba Zamówień1 -> FROM Zamówienia -> GROUP BY Klientld;
I Klientld | Liczba Zamówień
S rows in set (0.00 sec)
W podobnie prosty sposób możemy określić, jaka była minimalna i maksymalna wartość zamówień złożonych przez naszych klientów od 1 stycznia do 31 marca 2005 roku. Pozwala na to instrukcja: