180 likes | 813 Views
Összesítés és csoportosítás lekérdezésekben. Halmazműveletek. Összesítés és csoportosítás. Gyűjtőfüggvények 1. Összesítő vagy aggregáló függvényeknek is nevezik őket Rekordok egy csoportjára csak egy értéket adnak vissza A NULL értékeket figyelmen kívül hagyják COUNT(mezőnév)
E N D
Összesítés és csoportosítás lekérdezésekben. Halmazműveletek.
Gyűjtőfüggvények 1. • Összesítő vagy aggregáló függvényeknek is nevezik őket • Rekordok egy csoportjára csak egy értéket adnak vissza • A NULL értékeket figyelmen kívül hagyják • COUNT(mezőnév) • azon rekordok száma, ahol az adott mező nem üres • COUNT(*): a rekordok száma a táblában • SUM(mezőnév) • az adott oszlopban lévő értékek összege
Gyűjtőfüggvények 2. • MIN(mezőnév) • az adott oszlopban lévő értékek minimuma • MAX(mezőnév) • az adott oszlopban lévő értékek maximuma • AVG(mezőnév) • az adott oszlopban lévő értékek átlaga • STDDEV(mezőnév) • az adott oszlopban lévő értékek szórása • VARIANCE(mezőnév) • az adott oszlopban lévő értékek szórásnégyzete average standard deviation
COUNT - példák • SELECT COUNT(*) FROM vevok; • a vevok tábla sorainak száma • SELECT COUNT(cikkszam) FROM rtetel WHERE egysegar > 100; • azon rendelési tételek száma, ahol az egységár meghaladja az 100 Ft-ot
SUM - példák • SELECT SUM(mennyiseg * egysegar) FROM rtetel WHERE rszam = 4; • a 4-es számú rendelésen szereplő áruk összértéke • SELECT SUM(mennyiseg) FROM rtetel; • az összes megrendelt áru mennyisége (fajtától és mennyiségi egységtől függetlenül)
MIN, MAX, AVG - példa • SELECT MIN(cikknev), MAX(egysegar), AVG(atlegysegar) FROM cikkA legolcsóbb áru, a legdrágább ár, és az ajánlott árak átlaga
STDDEV, VARIANCE példa • SELECT STDDEV (egysegar), VARIANCE(atlegysegar) FROM cikk; • A cikkek egységárának szórása és átlagos egységárának varianciája
Az adatok csoportosítása • SELECT … FROM … [WHERE …] GROUP BY kifejezés1 [, kifejezés2 … ]; • Általában összesítő függvényekkel együtt használatos • A SELECT utáni kifejezéseknek vagy a GROUP BY-nál is elő kell fordulni, vagy már a SELECT-nél egy összesítő függvényben kell szerepelni
GROUP BY - 1. példa • SELECT cikkszam, AVG(mennyiseg) FROM rtetel GROUP BY cikkszam; • A megrendeléseken szereplő cikkek cikkszámát és az átlagos megrendelt mennyiséget kapjuk • Mellékhatásként a cikkszámok növekvő rendezése is megtörténik
Csoportosítás több mező szerint • A rendszer először az elsőként megadott mező értékei szerint képez csoportokat … • … aztán minden csoportban alcsoportokat képez a második mező szerint … • … aztán minden alcsoportban al-alcsoportokat képez a harmadik mező szerint … • stb.
Csoportosítás több mező szerint - 1. példa • SELECT rszam, szall_hi, sum(mennyiseg * egysegar) as ertek FROM rtetel GROUP BY rszam, szall_hi; • Megadja a rendelt áruk összértékét megrendelésenként, azon belül szállítási határidő szerint csoportosítva
Csoportosítás több mező szerint - 2. példa • SELECT min(nev1 || ‘ ‘ || nev2) as vevo, rtetel.rszam, sum(mennyiseg * egysegar) as ertek FROM vevok, rendel, rtetel WHERE vevok.vevokod = rendel.vevokod AND rendel.rszam = rtetel.rszam GROUP BY rendel.vevokod, rtetel.rszam; • Megadja a rendelt áruk összértékét vevőnként, azon belül megrendelésenként csoportosítva • Ha a GROUP BY után felcseréljük a mezőket, ugyanezeket az adatokat kapjuk, csak más sorrendben
Csoportosítás több mező szerint - 3. példa • SELECT min(nev1 || ‘ ‘ || nev2) as vevo, min(cikk.cikknev), sum(mennyiseg) as mennyi, avg(egysegar) as atlagos_egysegar, sum(mennyiseg * egysegar) as ertek FROM vevok, rendel, rtetel, cikk WHERE vevok.vevokod = rendel.vevokod AND rendel.rszam = rtetel.rszam AND rtetel.cikkszam = cikk.cikkszam GROUP BY rtetel.cikkszam, rendel.vevokod; • Megadja a rendelt áruk mennyiségét, átlagos egységárát és összértékét vevőnként, azon belül cikkenként csoportosítva
Feltétel megadása a csoportosított adatokra • Alakja: HAVING feltétel • A GROUP BY után áll • A feltétel olyan, mint a WHERE után
HAVING - példa • SELECT rszam, SUM(mennyiseg * egysegar) as ertek, COUNT(*) as tetelszam FROM rtetel GROUP BY rszam HAVING COUNT(*) <= 5; • Megadja rendelésenként az összértéket és a tételszámot, de csak azok a megrendelések jelennek meg, amelyeken legfeljebb 5 tétel szerepel
… és még rendezni is lehet! • SELECT rszam, SUM(mennyiseg * egysegar) as ertek, COUNT(*) as tetelszam FROM rtetel GROUP BY rszam HAVING COUNT(*) <= 5ORDER BY 2; • Az előző példa adatai összérték szerint rendezve
A lekérdezések végrehajtási sorrendje • A rendszer kiválasztja a WHERE feltételnek eleget tevő sorokat • Csoportosítja őket a GROUP BY szakasz előírásai szerint • Kiszámítja minden csoportra az összesítő függvények értékét • Kiválogatja a HAVING feltételnek eleget tevő sorokat • Rendezi a megmaradt sorokat az ORDER BY előírásai szerint