Windows - Összegzés készítése a COMPUTE feltétellel

5. rész

forráskód letöltése
A Transact-SQL SELECT utasítás COMPUTE feltétele segítségével többféle összegzést, részösszeg képzést végezhetünk. Az összegző eredményeket külön kapjuk az eredménytáblától, egy újabb eredményként. Cikkünkben áttekintjük a funkció felhasználási lehetőségeit.
A COMPUTE segítségével összegző sort tudunk készíteni az eredménytáblához. Amikor a BY kulcsszót is használjuk, akkor a COMPUTE létrehoz megszakításokat és részösszegeket. Mindkét lehetőséget – BY nélküli, és vele együtt használatos COMPUTE feltételt – használhatjuk egyazon lekérdezésben.
Szintaxis
[ COMPUTE 
{ { AVG | COUNT | MAX | MIN | STDEV | STDEVP 
| VAR | VARP | SUM } 
( expression ) } [ ,...n ] 
[ BY expression [ ,...n ] ] ]
Paraméterek
AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
Az összegzést határozzák meg. Ezek a sorösszegző függvények használhatók a COMPUTE feltétellel együtt:
Sorösszegző függvény Eredmény
AVG A numerikus kifejezés értékek átlaga
COUNT A lekérdezett sorok száma
MAX A legnagyobb érték a kifejezésben
MIN A legkisebb érték a kifejezésben
STDEV Statisztikai standard szórás minden értékre a kifejezésben
STDEVP Statisztikai standard szórás populációja minden értékre a kifejezésben
SUM Minden érték összege a kifejezésben
VAR Statisztikai eltérés minden értékre a kifejezésben
VARP Statisztikai eltérés populációja minden értékre a kifejezésben
Nem egyenértékű a COUNT(*) használatával. Hogy a GROUP BY és a COUNT(*) által készített összegző információt megtaláljuk, használjuk a COMPUTE kulcsszót BY nélkül. A függvény figyelmen kívül hagyja a null értékeket.
A DISTINCT kulcsszó nem engedélyezett, ha a COMPUTE segítségével sorösszegző függvényeket adunk meg. Amikor hozzáadunk, vagy átlagolunk integer értéket, az SQL szerver az eredményt int értékként kezeli, akár tinyint vagy smallint az oszlop típusa.
( expression )
Egy kifejezés, mint például az oszlop neve, amelyre a számítást kezdeményezzük. A kifejezésnek meg kell jelennie az oszlop felsorolásban, és azonosnak kell lennie a felsorolásban lévő elemmel. Egy oszlop alias nem használható a kifejezésen belül.
ntext, text, vagy image típus nem használható a COMPUTE vagy COMPUTE BY feltétellel.
BY expression
Létrehoz megszakításokat és részösszegeket. A kifejezés egy pontos másolata egy ORDER BY kifejezésnek, a megfeleltetett ORDER BY feltételben. Ez leginkább oszlop név vagy alias. Több kifejezés is megadható. Több kifejezés felsorolása a BY után, alcsoportokra tördeli a csoportokat és végrehajtja az összegző függvényt a csoportosítás valamennyi szintjén.
Ha COMPUTE BY-t használunk, akkor az ORDER BY feltételt is használnunk kell. A kifejezéseknek azonosaknak kell lenniük, vagy egy részüket fel kell sorolni az ORDER BY után, egyazon sorrendben.
COMPUTE használata esetén az oszlop lista sorrendje felülbírálja a COMPUTE összegző függvények sorrendjét. Fejlesztőknek figyelniük kell erre a szükségszerűségre, hogy az eredményeket megfelelő sorrendbe tegyék.
A COMPUTE feltételt nem használhatjuk SELECT INTO utasításban, ugyanis ezek az utasítások táblákat hoznak létre és az összegző sorok nem tárolhatók az adatbázisban. Emiatt bármilyen számítás a COMPUTE feltételben nem látszik a SELECT INTO által létrehozott új táblában.
Nem használhatjuk a COMPUTE feltételt akkor sem, ha egy DECLARE CURSOR utasítás része.
Példák
A példákhoz a Northwind adatbázist használjuk.
SELECT SupplierID, UnitPrice
FROM Products
ORDER BY SupplierID
COMPUTE SUM(UnitPrice)
A termékek szállító szerinti listájában az értékeket mutatja meg, a végén pedig egy összeget képez.
SELECT SupplierID, UnitPrice
FROM Products
ORDER BY SupplierID
COMPUTE SUM(UnitPrice) BY SupplierID
Itt minden szállítóhoz részösszegeket kapunk.
SELECT SupplierID, SUM(UnitPrice)
FROM Products
GROUP BY SupplierID
A COMPUTE BY funkció helyett használhatjuk a GROUP BY feltételt, amely egy eredményhalmazban jeleníti meg a csoportösszegeket.
SELECT SupplierID, CategoryID, UnitPrice
FROM Products
ORDER BY SupplierID, CategoryID
COMPUTE SUM(UnitPrice) BY SupplierID, CategoryID
Az utolsó példában többszörös csoportosításra láthatunk példát, itt a szállítókon belül kategóriák szerint is képződik részösszeg.

A Transact-SQL SELECT utasítás cikksorozat