Delphi - Rendezés, Csoportosítás, Aggregate függvények

Local SQL 2. rész

forráskód letöltése
Ezen a héten azt vizsgáljuk meg az SQL lekérdezések kapcsán, hogy a kapott eredményt hogyan tudjuk rendezni, illetve csoportosítani. Utóbbi esetben megismerkedünk az ún. Aggregate függvényekkel is. Ezen a héten azt vizsgáljuk meg az SQL lekérdezések kapcsán, hogy a kapott eredményt hogyan tudjuk rendezni, illetve csoportosítani. Utóbbi esetben megismerkedünk az ún. Aggregate függvényekkel is.

Mellékelt példaprogram használatához hozzon létre egy ASTESZT5 nevű aliast. Ez mutasson arra a könyvtárra, ahová a példaprogramot helyezte.

Az itt található példák megértéséhez nem árt, ha már látta a Local SQL fejezet előző példáit.

Az alábbiakban sorra vesszük az egyes lekérdezéseket:

1. Az első lekérdezésnél egyszerűen csak rendezzük az adatbázist az A mező értékei szerint növekvő sorrendben.

2. Itt ugyanúgy rendezzük az adatbázist, de most dátum szerint tesszük a D mező alapján.

3. Egy rendezési feltételben több szempontot is megadhatunk, vagyis több mezőnevet felsorolhatunk vesszővel elválasztva. Jelen példában először megtörténik a rendezés az A mező szerint, majd ha van két vagy több azonos érték az A mezőben, akkor ezen rekordok közötti sorrendet a D mező értékei fogják meghatározni. A példában található több olyan A mező, melynek az értéke "aab", ha megfigyeljük ezeket a rekordokat, akkor láthatjuk hogy dátum szerint rendezettek.

4. Eddig mindig növekvő sorrendbe rendeztük az adatbázist. Ha épp az ellenkezőjére lenne szükségünk, vagyis csökkenő sorrendet szeretnénk kialakítani akkor az adott mező után írjuk be a DESC kulcsszót. Ha több mezőt is megadunk a rendezésnél, akkor egyesével eldönthetjük, hogy melyik mező legyen növekvő, melyik csökkenő sorrendben. Így írhatnánk azt is, hogy ORDER BY A DESC, D. Ekkor az A mező szerint csökkenő lenne a sorrend, míg a D szerint növekvő.

5. Rendezésnél nem kötelező a mező nevével hivatkoznunk arra, hogy mi alapján történjen a rendezés. Ha egy számot írunk be, azzal is kiválaszthatunk egy mezőt. Ha a SELECT után csillag következik, akkor a beírt szám az adatbázisban azt a mezőt jelöli, ahányadik fizikailag is a mező. Jelen példában a második mező a B, így ha kettőt írunk, akkor ezzel a B mezőre hivatkozunk. Ha a SELECT után vesszővel elválasztva felsorolunk néhány tetszőleges mezőnevet, akkor a megadott szám erre a listára vonatkozik. Hogy ez miért is jó, arra majd a 12. lekérdezésnél láthatunk példát.

6. Tekintsük át most a csoportosításokat. Az A mezőt megfigyelve láthatjuk, hogy több olyan rekord is van, ahol ennek a mezőnek azonos az értéke. Ha például azt szeretném megtudni, hogy melyikből hány darab van, akkor azt csoportosítással és a COUNT aggregate függvénnyel könnyedén megtehetjük. A példában láthatjuk, hogy az eredmény halmaz ami létrejött két oszlopot tartalmaz. Az első oszlopban kerültek felsorolásra az A mező értékei, de mindenféléből csak egy. A második oszlop tartalmazza a COUNT függvény által szolgáltatott értéket. Ebből rögtön láthatjuk, hogy az AAB értékből 6 darab található az adatbázisban, míg az ABD értékből 3 és így tovább. Tehát ha a GROUP kulcsszó után megadunk egy mezőnevet, akkor a csoportosítás erre nézve fog megtörténni. Fontos tudnivaló, hogy a GROUP használatakor a SELECT után csak azt a mezőnevet adhatjuk meg, amelyre a csoportosítást végeztük, ezen kívül csak valamilyen aggregate függvény állhat.

7. Másik aggregate függvény a SUM. Az itt megadott mezőnek az összegét fogjuk visszakapni. Az előző példában láttuk, hogy az AAB értéknek 6 előfordulása található ebben az adatbázisban. A SUM függvénynek a B mezőt adtuk át, tehát a SUM ennek a 6 rekordnak az összegét fogja szolgáltatni az AAB sor esetén. A továbbiakban minden egyes értékre elvégzi az összegzést, mindig csak a megfelelő rekordok értékeit adva össze.

8. Természetesen az SQL-ben lehetőség van az összes kulcsszó kombinálására, így a csoportosítás közben egy feltételt is megadhatunk, amelyről az SQL fejezet első cikkében volt szó. Így ha itt használjuk a WHERE feltételt, akkor elérhetjük azt is akár, hogy a csoportosítás csupán egyetlen értékre történjen meg.

9. További aggregate függvények a MIN, a minimum érték keresésére, a MAX a maximum érték keresésére és az AVG az átlag számításra. A MIN és MAX az adott rekordok közül megkeresi a legkisebb és legnagyobb értékeket, míg az AVG a rekordok átlagértékét számítja ki.

10. A csoportosítást nemcsak egy mezőre végezhetjük el. Hasonlóan a rendezéshez itt is megadhatunk több mezőt vesszővel elválasztva. Ekkor a létrejövő eredmény halmaz úgy néz ki, hogy először megtörténik a csoportosítás az első mezőre, majd ezen belül a másodikként megadott mezőre. A példában jól látszik, hogy az AAB értéknél három olyan rekordunk van, melynek a B mező értéke 100. Két olyan rekord van, ahol a B 200 és egy olyan, ahol a B 300.

11. Lehetőségünk van arra is, hogy az aggregate függvények eredményének ismeretében végezzünk szűrést az eredmény halmazon. Ehhez a HAVING kulcsszót kell alkalmaznunk. A példában csak azokat az eredmény sorokat láthatjuk, ahol a darabszám nagyobb, mint egy.

12. A 6. példát megnézve itt ugyanazt az eredmény halmazt kapjuk azzal a különbséggel, hogy most rendezzük az eredményt méghozzá egy aggregate függvény eredményeinek alapján. Ekkor ugye nem hivatkozhatunk egy mezőnévre, mint ahogy azt az ORDER kulcsszónál megszoktuk. Ilyenkor tudjuk előnyösen alkalmazni azt, hogy szám szerint is hivatkozhatunk az egyes mezőkre. Lásd 5. példa.

Local SQL cikksorozat