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 brand
a -ba pedig a márkát és a kifejezéstSELECT
COUNT(*)
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 WHERE
a 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 |
GO TO FULL VERSION