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