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;