3.1 Instrukcja GROUP BY
Język SQL jest bardzo potężny. Oprócz prostego pobierania danych umożliwia grupowanie danych w czasie zapytania. Na przykład chcemy wiedzieć, ile mamy rodzajów produktów każdej marki, jak możemy to zrobić?
Jest do tego specjalny operator GROUP BY, oto jak to jest napisane.
GROUP BY column
Napiszmy zapytanie, które prosi SQL o wyświetlenie liczby typów produktów dla każdej marki. Takie żądanie wyglądałoby mniej więcej tak:
SELECT brand, COUNT(*)
FROM product
GROUP BY brand
Otrzymasz następujący wynik zapytania:
| marka | liczyć(*) |
|---|---|
| (ZERO) | 2 |
| Boscha | 4 |
| IKEA | 6 |
| LG | 2 |
| Inteligentny kwiat | 1 |
Przeanalizujmy dokładnie, jakiego rodzaju prośbę napisaliśmy i jaki otrzymaliśmy wynik. W rezultacie widzimy dwie kolumny. Pierwszy z listą marek, co jest logiczne. Chcieliśmy uzyskać coś w rodzaju zestawu par „marka -> ilość” .
Należy pamiętać, że wśród nazw marek znajduje się słowo NULL. Rzeczywiście, mamy produkty marki, w której jest napisane NULL, i widzimy je tutaj. Trochę nieoczekiwane, ale pomocne. Widzimy, ile jest produktów niemarkowych.
Przyjrzyjmy się teraz bliżej żądaniu. Chcieliśmy poznać liczbę produktów każdej marki, więc napisaliśmy GROUP BY brand, aw SELECTnapisaliśmy markę i wyrażenieCOUNT(*)
COUNT(*)to tak zwana funkcja agregująca, która jest wykonywana na grupie wierszy. W naszym przypadku po prostu liczy ich liczbę. Istnieje wiele takich funkcji i przyjrzymy się im nieco później.
3.2 Złożone zapytania z GROUP BY
Teraz napiszmy zapytanie, w którym najpierw odrzucamy produkty, których cena jest mniejsza niż 10, a następnie grupujemy je. Takie żądanie wyglądałoby mniej więcej tak:
SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand
Otrzymasz następujący wynik zapytania:
| marka | liczyć(*) |
|---|---|
| Boscha | 4 |
| IKEA | 5 |
| LG | 2 |
| Inteligentny kwiat | 1 |
Wszystkie produkty NULL zniknęły z naszej tabeli wyników, ponieważ były bardzo tanie, a liczba produktów IKEA spadła o 1. Z 6 do 5.
Sugeruje to, aby najpierw zastosować WHEREżądane linie do filtrowania, a dopiero potem zastosować grupowanie do wyniku.
3.3 Nazwy kolumn wyniku
Nawiasem mówiąc, możesz nadać nazwy wynikowym kolumnom. Zobacz, jak serwer zasugerował nazwę count(*)? Zastąpmy to sumą. Takie żądanie wyglądałoby mniej więcej tak:
SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand
Otrzymasz następujący wynik zapytania:
| marka | całkowity |
|---|---|
| Boscha | 4 |
| IKEA | 5 |
| LG | 2 |
| Inteligentny kwiat | 1 |
Możesz także zmienić nazwy istniejących kolumn. Weźmy jedno z wcześniej używanych zapytań i dodajmy nowe nazwy do kolumn.
SELECT
id AS product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL
Otrzymasz następujący wynik zapytania:
| ID produktu | Nazwa produktu | cena |
|---|---|---|
| 2 | Krzesło | 5.00 |
| 8 | Lampa | 15.00 |
GO TO FULL VERSION