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 SELECT
napisaliś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