Fájlok írása Pytonban!
Elkészült a Python nyelv Szövegfájlok írása tananyagunk! Jó tanulást, jó gyakorlást!

<info9>

Csoportosítás, csoportos összesítés

Most, hogy megismerkedtünk az összesítőfüggvényekkel, ideje megismerkednünk a csoportosítással. A csoportosítás lehetővé teszi, hogy ahelyett, hogy az összes rekord adatait összegeznénk, az adatokat csoportonként összesítsük – például az érdemjegyek átlagát tantárgyanként, vagy diákonként tudjuk meghatározni. Ezekhez a csoportosításokhoz a GROUP BY kulcsszót használhatjuk, ezt követően kell megadnunk a csoportosítás alapjául szolgáló mezőt, vagy kifejezést. Ha például a tantárgyak neve alapján csoportosítva szeretnénk átlagot számítani, arra használhatjuk az alábbi kifejezést:

SELECT `nev`, AVG(`jegy`) FROM `jegy` 
JOIN `tantargy` ON `jegy`.`targy_id` = `tantargy`.`id`
GROUP BY `tantargy`.`nev`

Ez a lekérdezés tehát csak azokból a rekordokból fog átlagot számolni, amikben a nev mező értéke megegyezik. Igény szerint persze egynél több mező alapján is tudunk csoportosítani, ezesetben csak azok a rekordok kerülnek összesítésre, amikben az összes mező megegyezik. Mindezt összekombinálva az eddig tanultakkal, könnyedén elkészíthetünk egy lekérdezést, amely megadja a tanulók átlagait, valamint jegyeinek számát tantárgyanként, a tanuló neve, azon belül pedig a tantárgy neve szerint sorbarendezve:

SELECT `diak`.`nev` AS "Tanuló",
`tantargy`.`nev` AS "Tantárgy",
AVG(`jegy`) AS "Átlag",
COUNT(`jegy`) AS "Jegyek száma"
FROM `jegy`
JOIN `tantargy` ON `jegy`.`targy_id` = `tantargy`.`id` JOIN `diak` ON `diak`.`id` = `jegy`.`diak_id`
GROUP BY `tantargy`.`nev`, `diak`.`nev`
ORDER BY `diak`.`nev`, `tantargy`.`nev`

A lekérdezést rögtön ki is próbálhatod ide kattintva az SQL homokozóban!

Itt a húsvét!

Szeretnél az ünnepek alatt is gyakorolni? Vár az Easter Bug Hunt játékunk! Csatlakozz, és keresd meg az összes hibát - akár még jutalom is ütheti a markod!

Irány a játék

“Minden név csak egyszer jelenjen meg”

Komplexebb lekérdezések esetén előfordul, hogy jó adatok jelennek meg, azonban többször, mint ahányszor szeretnénk. Ilyen rendszerint a több táblát összefogó lekérdezések esetén fordul elő, és bár ennek megoldására általában a DISTINCT kulcsszót használjuk, érdemes megjegyezni, hogy a GROUP BY kulcsszóval való csoportosítás is megoldás lehet a problémára. Példaképp kérdezzük le betűrendben az összes olyan diákot, aki kapott dicséretet a tanév során:

SELECT `diak`.`nev` FROM `diak` 
       JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
       WHERE `tipus` = "dicséret"
       ORDER BY `diak`.`nev`

Ha áttekintjük a lekérdezés eredményét (klikk ide és nézd meg az SQL homokozóban), láthatjuk, hogy egyes diákok nevei többször is megjelennek. Ennek az az oka, hogy ők több dicséretet is kaptak, annyiszor kerülnek kilistázásra, mint ahány hozzájuk tartozó rekord van a beírások táblájában. Ha szeretnénk, hogy minden diák neve csak egyszer jelenjen meg, a DISTINCT kulcsszó helyett akár csoportosítást is használhatunk – íme két példa:

Példa csoportosítással:

SELECT `diak`.`nev` FROM `diak` 
       JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
       WHERE `tipus` = "dicséret"
       GROUP BY `diak`.`nev`
       ORDER BY `diak`.`nev`

Példa a DISTINCT kulcsszóval:

SELECT DISTINCT `diak`.`nev` FROM `diak` 
       JOIN `beiras` ON `diak`.`id` = `beiras`.`diak_id`
       WHERE `tipus` = "dicséret"
       ORDER BY `diak`.`nev`