adatbázis
GROUP BY – SQL
Adatbázis – SQL
Csoportosítás SQL-ben
GROUP BY:
- Csoportosítás: A GROUP BY parancsot akkor használjuk, amikor egy táblát oszlop(ok) alapján csoportosítani szeretnénk. Ez különösen hasznos, ha aggregáló függvényeket (pl. COUNT, AVG, SUM, MAX, MIN) szeretnénk alkalmazni csoportokra.
- Működése: A megadott oszlop(ok) alapján csoportosítja az adatokat, és minden egyes csoporthoz egy sor eredményt ad vissza.
SELECT varos, COUNT(*) AS ‘Dolgozók száma’ FROM dolgozo GROUP BY varos;
Ez megadja, hogy dolgozó van városonként.
HAVING:
- Utólagos szűrés: A HAVING kifejezés az aggregált adatokra vonatkozó szűrési feltételeket határozza meg. Ez különbözik a WHERE-től, mert WHERE-rel csak az eredeti adatokra lehet szűrni, míg HAVING-gel az aggregált eredményeket szűrhetjük.
SELECT osztaly, AVG(fizetes) AS ‘Átlagfizetés’ FROM dolgozo GROUP BY osztaly HAVING AVG(fizetes) > 500000;
Ez a lekérdezés megadja, hogy mely osztályokban haladja meg az átlagfizetés az 500.000 forintot.
FELADATOK
1. Listázd ki, hogy az egyes városokból hány dolgozó érkezik, és nevezd el a várost tartalmazó oszlopot „Város”-nak, a darabszámot pedig „Dolgozók száma”-nak.
SELECT varos AS ‘Város’, COUNT(*) AS ‘dolgozók száma’
FROM dolgozo
GROUP BY varos;
2. Listázd ki, hogy az egyes osztályokban hány dolgozó van. Az oszlopok neve legyen „Osztály” és „Létszám”.
SELECT o.onev AS ‘Osztály’, COUNT(*) AS ‘Létszám’ FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid GROUP BY o.onev;
3. Listázd ki azoknak az osztályoknak a nevét, ahol az átlagfizetés meghaladja a 400000 Forintot
SELECT o.onev AS ‘Osztály’, AVG(‘d.fizetes’) AS ‘átlagfizetés’ FROM dolgozo d INNER JOIN osztaly o ON o.oid = d.oid GROUP BY o.onev HAVING AVG(d.fizetes) > 400000;
4. Melyik városból származik a legtöbb dolgozó? Használj MAX és COUNT függvényeket a megoldáshoz.
SELECT varos, COUNT(*) AS ‘Dolgozok száma’ FROM dolgozo GROUP BY varos ORDER BY COUNT(*) DESC LIMIT 1;
5. Az egyes osztályok átlagfizetése mellett listázd ki a minimális fizetést is az adott osztályban.
SELECT o.onev AS ‘Osztály’, AVG(d.fizetes) AS ‘Átlagfizetés’, MIN(d.fizetes) AS ‘Minimális fizetés’ FROM dolgozo d INNER JOIN osztaly o ON d.oid = o.oid GROUP BY o.onev;