Kihagyás

5. gyakorlat

Aggregáló függvények

  • AVG([DISTINCT|ALL]n)
    • Null értékeket kihagyja
  • COUNT(*|[DISTINCT|ALL]expr)
    • Ha *, akkor az összes elemszám, null értékkel együtt
    • expr esetén a nem null értékek száma
  • MAX
  • MIN
  • SUM
  • etc...

pl.

SELECT AVG(salary), MAX(salary),
       MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';
SELECT COUNT(DISTINCT department_id)
FROM employees;

A COALESCE függvénnyel kikényszeríthető a nullértékeket tartalmazó sorok figyelembe vétele:

SELECT COUNT(COALESCE(commission_pct, 0))
FROM employees;

Adatcsoportok létrehozása

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;

Csoportosítás utáni szűrés

SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000;

Relációs algebra - kiterjesztett műveletek

  • Ismétlődések megszüntetése: \(\delta\)
  • Összesítő műveletek
  • Csoportosítás
  • Kiterjesztett vetítés
  • Rendezési művelet

Csoportosítás

\(\gamma_{\text{színésznév}, MIN(\text{év})\to \text{elsőFilmÉv}}\)

A relációs algebrai kifejezést fel lehet írni fával is! (lásd. UW_52_KiterjAlg.pdf 6. oldal)

Feladatok

1. feladat

Adjuk meg azokat az osztályokat és átlagfizetéseket, ahol az nagyobb, mint 2000.

SELECT osztaly.onev, AVG(fizetes) 
FROM dolgozo
NATURAL JOIN osztaly
GROUP BY osztaly.onev
HAVING AVG(fizetes)>2000;

2. feladat

Adjuk meg az átlagfizetéseket azokon az osztályokon, ahol legalább 4-en dolgoznak

SELECT oazon, AVG(fizetes), COUNT(*) "Dolgozók száma"
FROM dolgozo
GROUP BY oazon
HAVING COUNT(*) >= 4;

3. feladat

Adjuk meg az átlagfizetéseket és telephelyeket azokon az osztályokon, ahol legalább 4-en dolgoznak

SELECT oazon, osztaly.telephely, AVG(fizetes)
FROM dolgozo
NATURAL JOIN osztaly
GROUP BY oazon, osztaly.telephely
HAVING COUNT(*) >= 4;

4. feladat

Adjuk meg azon osztályok nevét és telephelyét, ahol az átlagfizetés nagyobb, mint 2000

SELECT onev, telephely
FROM dolgozo
NATURAL JOIN osztaly
GROUP BY oazon, osztaly.onev, telephely
HAVING AVG(fizetes) > 2000;

5. feladat

Adjuk meg azokat a fizetési kategoriákat, amelyekbe pontosan három dolgozó fizetése esik

SELECT kategoria FROM dolgozo
JOIN fiz_kategoria
    ON fizetes BETWEEN fiz_kategoria.also and fiz_kategoria.felso
GROUP BY kategoria
HAVING COUNT(*) = 3;

6. feladat

Adjuk meg azon osztályok nevét és telephelyét, amelyen van 1-es fizetési kategóriájú dolgozó

SELECT osztaly.onev, osztaly.telephely
FROM dolgozo NATURAL JOIN osztaly, fiz_kategoria
WHERE fizetes BETWEEN also AND felso AND fiz_kategoria.kategoria = 1
GROUP BY onev, telephely;

7. feladat

Kik szeretnek minden gyümölcsöt?

SELECT nev FROM szeret
GROUP BY nev
HAVING COUNT(DISTINCT gyumolcs) = (SELECT COUNT(DISTINCT gyumolcs) FROM szeret);

ZH tartalma

  • Ti írtatok relációs algebrai kifejezést és az SQL megfelelője
  • Ő ad meg relációs kifejezést, és mondjuk meg, hogy mit csinál

Következő lapon: Gépes feladat

gyakorlatilag lehet hozzá használni mindent