3.1 GROUP BY nyilatkozat

Az SQL nyelv nagyon erős. Az egyszerű adatlekérés mellett lehetővé teszi az adatok csoportosítását a lekérdezés időpontjában. Például azt szeretnénk tudni, hogy az egyes márkákból hányféle termékünk van, hogyan tehetjük ezt meg?

Erre van egy speciális operátor GROUP BY, így írják.

GROUP BY column

Írjunk egy lekérdezést, amely megkéri az SQL-t, hogy jelenítse meg az egyes márkák terméktípusainak számát. Egy ilyen kérés valahogy így nézne ki:

SELECT brand, COUNT(*)
FROM product
GROUP BY brand

A következő lekérdezési eredményt kapja:

márka számol(*)
(NULLA) 2
Bosch 4
IKEA 6
LG 2
Okosvirág 1

Gondosan elemezzük, milyen kérést írtunk, és milyen eredményre jutottunk. Ennek eredményeként két oszlopot látunk. Az első a márkák listájával, ami logikus. Valami olyasmit szerettünk volna kapni, mint egy pár "márka --> mennyiség" .

Felhívjuk figyelmét, hogy a márkanevek között van egy szó NULL. Valójában vannak termékeink abban a márkában, amelyben ez szerepel NULL, és itt látjuk őket. Kicsit váratlan, de hasznos. Láthatjuk, mennyi márka nélküli termék van.

Most nézzük meg közelebbről a kérést. Szerettük volna tudni az egyes márkák termékeinek számát, ezért írtuk a , GROUP BY branda -ba pedig a márkát és a kifejezéstSELECTCOUNT(*)

COUNT(*)egy úgynevezett összesített függvény, amelyet a sorok egy csoportján hajtanak végre. A mi esetünkben egyszerűen megszámolja a számukat. Nagyon sok ilyen funkció létezik, és egy kicsit később megnézzük őket.

3.2 Összetett lekérdezések a GROUP BY segítségével

Most írjunk egy lekérdezést, ahol először eldobjuk azokat a termékeket, amelyek ára 10 alatt van, majd csoportosítjuk őket. Egy ilyen kérés valahogy így nézne ki:

SELECT brand, COUNT(*)
FROM product
WHERE price > 10
GROUP BY brand

A következő lekérdezési eredményt kapja:

márka számol(*)
Bosch 4
IKEA 5
LG 2
Okosvirág 1

Az összes NULL termék eltűnt az eredménytáblázatunkból, mivel nagyon olcsók voltak, és az IKEA termékek száma 1-gyel csökkent. 6-ról 5-re.

Ez azt sugallja, hogy először alkalmazza WHEREa kívánt sorokat a szűréshez, és csak ezután alkalmazza a csoportosítást az eredményre.

3.3 Az eredmény oszlopnevei

A kapott oszlopoknak egyébként nevet is adhatunk. Látod, hogyan javasolta a szerver a nevet count(*)? Cseréljük le összesen. Egy ilyen kérés valahogy így nézne ki:

SELECT brand, COUNT(*) AS total
FROM product
WHERE price > 10
GROUP BY brand

A következő lekérdezési eredményt kapja:

márka teljes
Bosch 4
IKEA 5
LG 2
Okosvirág 1

A meglévő oszlopokat át is nevezheti. Vegyük az egyik korábban használt lekérdezést, és adjunk új neveket az oszlopokhoz.

SELECT
id AS  product_id,
name AS product_name,
price
FROM product
WHERE price < 20 AND brand IS NOT NULL

A következő lekérdezési eredményt kapja:

termék azonosító termék név ár
2 Szék 5.00
8 Lámpa 15.00