Feladat
Egy tagdíjbefizetéseket nyilvántartó rendszer a következő adattáblákat tartalmazza:
Ugyfel Befiz
------ -----
Azon Azon
Nev Datum
SzulEv Osszeg
IrSzam
Orsz
ahol
Azon N 10 az ügyfél azonosítója
Nev C 30 az ügyfél neve
SzulEv N 4 az ügyfél születési évszáma
IrSzam N 4 az ügyfél lakhelyének irányítószáma
Orsz C 3 az ügyfél országának kódja
Datum DT a befizetés dátuma
Osszeg N 10 a befizetés összege
Az adatbázis az alábbi linkről tölthető le:
SQL lekérdezésekkel adjon választ az alábbi kérdésekre. Az elkészült és működő
lekérdezéseket mentse el egy
.txt szöveges fájlba a kérdésekhez tartozó sorszám
feltüntetésével.
Kérdések:
- Hogy hívják az egyes ügyfeleket? Jelenítse meg a nevüket ABC-sorrendben!
- Listázza ki a magyarországi ügyfeleket életkoruk szerint! Kezdje a legfiatalabbal!

SELECT nev, szulev, YEAR( NOW() )-szulev AS eletkor
FROM ...
...
...
- Adja meg a Pest megyei ügyfeleket! (Irányítószámuk 2-vel kezdődik.)
- Mennyi pénzt fizettek be összesen az ügyfelek?
- Mekkora összegű egy átlagos befizetés?
- Mennyi volt az eddigi legkisebb illetve legnagyobb befizetett összeg?
- Hány darab befizetés szerepel a nyilvántartásban?
- Milyen összegeket, és mikor fizetett Török Bálint?

SELECT datum, nev, osszeg
FROM ugyfel, befiz
WHERE ugyfel.azon = befiz.azon
AND nev='Török Bálint'
- Mennyit fizetett összesen Nagy Károly?
- Mennyit fizettek összesen a nem magyarországi befizetők?
- Mennyit fizettek az egyes ügyfelek?
- Mi az első három legtöbbet befizető ügyfél sorrendje?
- Mekkora összegű befizetések történtek az év egyes hónapjaiban?

SELECT MONTH(datum) AS ho , ...
FROM ...
...
- Melyek azok a napok, amikor több befizetés is történt?
- Mely befizetések régebbiek egy évnél?

SELECT ...
FROM ...
WHERE DATEDIFF( NOW() , datum ) >365
- Mennyi pénzt fizettek be az elmúlt 365 napban?
- Ki a legidősebb ügyfél?
- Ki, és mikor követte el a legkisebb összegű befizetést?
- Kinek a legkevesebb az összes befizetése?
- Van-e olyan ügyfél, aki még egyáltalán nem fizetett?

SELECT nev FROM ugyfel
WHERE azon NOT IN (SELECT azon FROM befiz)
- Fejenként mennyit fizettek átlagosan az ügyfelek, ha az átlagba
csak a fizető ügyfelek számítanak?

SELECT AVG(fejenkent)
FROM
(SELECT SUM(osszeg) AS fejenkent
FROM befiz GROUP BY azon)
AS xyz
vagy pedig
SELECT SUM(osszeg)/COUNT(DISTINCT azon)
FROM befiz
- Fejenként mennyit fizettek átlagosan az ügyfelek a nemfizető
ügyfeleket is beszámítva?
- Kik azok az ügyfelek, akik az átlagosnál többet fizettek?

SELECT nev, SUM(osszeg) AS ossz
FROM ugyfel, befiz
WHERE ugyfel.azon = befiz.azon
GROUP BY befiz.azon
HAVING ossz > (SELECT SUM(osszeg)/COUNT(DISTINCT azon) FROM befiz)
ORDER BY 2 DESC
Eddig 6 hozzászólás van a témához:
2020-01-14 18:04
Jeroxy
Nagyon jó! Vizsgára készültem vele az egyetemre, teljesen megfelelt és segített összerakni a lekérdezéseket a fejemben, nagyon köszönöm a segítséget!
2020-01-15 16:07
Admin
Kedves Jeroxy,
én pedig köszönöm a visszajelzést, és gratulálok!
2022-02-15 20:56
Erdős Ádám András
Nagyon jó a feladatok egymásra épülési sorrendje, de a 17. es azt sugallja nekem, hogy DATEDIFF() -e lkéne megoldanom. Viszont én így csináltam: "SELECT nev FROM ugyfel GROUP BY szulev LIMIT 0,1;" Nagyon érdekelne a másik megoldás is ha van Admin.
2022-02-16 18:20
Admin
Kedves Ádám,
a DATEDIFF() itt biztosan nem játszik. Mindig az a legidősebb, aki legrégebben született. Teljesen mindegy, milyen dátum van ma. A LIMIT 0,1-es megoldás majdnem jó, valószínűleg csak az elírás pontosítását igényli:
SELECT nev FROM ugyfel ORDER BY szulev LIMIT 0,1
Ami még ezen kívül szóba jöhetett volna, az a MIN() függvény - de ennek használata beágyazott lekérdezést igényelne. Ilyenformán a LIMIT-es megoldás egyszerűbb.
2026-05-31 19:35
Balázs V
Nagyon jó kis feladatsor, köszönöm! Egyedül magán az adatbázison kellett módosítanom: hozzá kellett adnom az elsődleges kulcsokat + a kapcsolatokat, ezek hiányoztak. De akár lehet + feladatként is ez :)