Számítások sql-ben. SQL összesítő függvények - SUM, MIN, MAX, AVG, COUNT Sql sorszámlálás

Ismerteti az aritmetikai operátorok használatát és a számított oszlopok felépítését. A COUNT, SUM, AVG, MAX, MIN végső (összesített) függvényeket veszi figyelembe. Példát mutat a GROUP BY operátor használatára adatkiválasztási lekérdezések csoportosítására. Leírja a HAVING záradék használatát.

Számított mezők építése

Általában alkotni számított (származtatott) mező a SELECT listának tartalmaznia kell valamilyen SQL kifejezést. Ezek a kifejezések az összeadás, kivonás, szorzás és osztás aritmetikai műveleteit, valamint a beépített SQL függvényeket használják. Megadhatja a tábla vagy lekérdezés bármely oszlopának (mezőjének) nevét, de csak a megfelelő utasítás FROM záradéklistájában szereplő tábla vagy lekérdezés oszlopnevét használja. Összetett kifejezések összeállításakor szükség lehet zárójelekre.

Az SQL-szabványok lehetővé teszik, hogy kifejezetten megadja a kapott tábla azon oszlopainak nevét, amelyekhez az AS záradékot használjuk.

KIVÁLASZTÁSA Termék.Név, Termék.Ár, Akció.Mennyiség, Termék.Ár*Ajánlat.Mennyiség, mint költség a terméktől BELSŐ CSATLAKOZÁS A termékre.ProductCode=Deal.ProductCode 6.1. példa.

Az egyes tranzakciók teljes költségének kiszámítása. 6.2. példa.

Szerezzen listát azokról a cégekről, amelyek feltüntetik az ügyfelek vezetéknevét és kezdőbetűit. VÁLASZTÁSA VÁLLALAT, Vezetéknév+""+ Bal(Keresztnév,1)+"."+Bal(Középnév,1)+"."AS Teljes név AZ ügyféltől

6.2. példa.

Az ügyfelek vezetéknevének és kezdőbetűinek feltüntetésével a cégek listájának beszerzése. A kérés a beépített Left függvényt használja, amely ebben az esetben lehetővé teszi, hogy egy szöveges változóban balról egy karaktert levágjunk.

6.3. példa. Szerezzen listát a termékekről, feltüntetve az értékesítés évét és hónapját.

SELECT Product.Name, Year(Transaction.Date) AS Év, Hónap(Tranzakció.Dátum) AS Hónap FROM FROM Termék BELSŐ JOIN Tranzakció a terméken.ProductCode=Transaction.ProductCode

6.3. példa.

Terméklista kézhezvétele az értékesítés évével és hónapjával. A lekérdezés a beépített Év és hónap függvényeket használja az év és a hónap kinyerésére egy dátumból.Összefoglaló függvények használata

Használatával végső (összesített) függvények:

  • Szám (kifejezés) - meghatározza a rekordok számát az SQL lekérdezés kimeneti halmazában;
  • Min/Max (kifejezés) - határozza meg a legkisebb és a legnagyobb értékkészletet egy adott kérésmezőben;
  • Átlag (kifejezés) – ez a funkció lehetővé teszi egy lekérdezéssel kiválasztott rekordmezőben tárolt értékkészlet átlagának kiszámítását. Ez egy számtani átlag, azaz. az értékek összege osztva a számukkal.
  • Összeg (kifejezés) – Kiszámítja a lekérdezés által kiválasztott rekordok egy adott mezőjében található értékkészlet összegét.

Leggyakrabban az oszlopneveket használják kifejezésként. A kifejezés több táblázat értékeinek felhasználásával is kiszámítható.

Mindezek a függvények a táblázat egyetlen oszlopában lévő értékeken vagy egy aritmetikai kifejezésen működnek, és egyetlen értéket adnak vissza. A COUNT , MIN és MAX függvények numerikus és nem numerikus mezőkre egyaránt érvényesek, míg a SUM és AVG függvények csak numerikus mezőkre használhatók, a COUNT(*) kivételével. Bármely függvény eredményének kiszámításakor először az összes null értéket kiküszöböljük, majd a szükséges műveletet csak a fennmaradó adott oszlopértékekre alkalmazzuk. A COUNT(*) opció a COUNT függvény speciális használati esete, célja az eredményül kapott táblázat összes sorának megszámlálása, függetlenül attól, hogy nullákat, ismétlődéseket vagy bármilyen más értéket tartalmaz.

Ha az összegző függvény használata előtt el kell távolítania az ismétlődő értékeket, akkor a függvénydefinícióban az oszlop nevét meg kell előznie a DISTINCT kulcsszóval. A MIN és MAX függvényeknél nincs értelme, de használata befolyásolhatja a SUM és AVG függvények eredményét, ezért minden esetben mérlegelni kell, hogy jelen legyen-e. Ezenkívül a DISTINCT kulcsszó csak egyszer adható meg bármely lekérdezésben.

Ezt nagyon fontos megjegyezni végső (összesített) függvények csak listában használható egy SELECT záradékban és a HAVING záradék részeként. Minden más esetben ez elfogadhatatlan. Ha a SELECT záradékban lévő lista tartalmazza végső (összesített) függvények, és a lekérdezés szövege nem tartalmazza a GROUP BY záradékot, amely lehetővé teszi az adatok csoportokba foglalását, akkor a SELECT záradék egyik listaeleme sem tartalmazhat mezőkre való hivatkozást, kivéve abban az esetben, ha a mezők argumentumként működnek. végső funkciók.

6.4. példa. Határozza meg a termék első alfabetikus nevét.

SELECT Min(Product.Name) AS Min_Name FROM Product 6.4. példa.

A termék első betűrendes nevének meghatározása. 6.5. példa.

Határozza meg a tranzakciók számát. SELECT Count(*) AS Ügyletek_száma FROM Deal

6.5. példa. Határozza meg a tranzakciók számát.

6.6. példa. Határozza meg az eladott áruk teljes mennyiségét.

SELECT Sum(Deal.Quantity) AS Item_Quantity FROM Deal 6.6. példa.

Az eladott áruk összmennyiségének meghatározása. 6.7. példa. Határozza meg az eladott áruk átlagos árát! SELECT Átl.(Termékár) AS Átl.ár A termék BELSŐ CSATLAKOZTATÁSÁBÓL Deal ON Product.ProductCode=Deal.ProductCode;

6.7. példa. Meghatározás

átlagos ár

eladott árut. végső (összesített) függvények SELECT Sum(Termék.Ár*Tranzakció.Mennyiség) AS költségként termék BELSŐ JOIN Tranzakció ON Product.ProductCode=Transaction.ProductCode

6.8. példa. Az eladott áruk összköltségének kiszámítása. GROUP BY záradék

A lekérdezésekhez gyakran részösszegek generálása szükséges, amit általában az „mindegyikhez...” kifejezés megjelenése jelez a lekérdezésben. A SELECT utasításban erre a célra egy GROUP BY záradékot használnak. A GROUP BY-t tartalmazó lekérdezést csoportosítási lekérdezésnek nevezzük, mivel csoportosítja a SELECT művelet által visszaadott adatokat, majd minden egyes csoporthoz egyetlen összefoglaló sort hoz létre. Az SQL szabvány megköveteli, hogy a SELECT és a GROUP BY záradék szorosan összefüggjenek. Ha egy SELECT utasítás GROUP BY záradékot tartalmaz, akkor a SELECT tagmondatban minden listaelemnek egyetlen értékkel kell rendelkeznie a teljes csoportra vonatkozóan. Ezenkívül a SELECT záradék csak a következő típusú elemeket tartalmazhatja: mezőnevek,

, állandók és kifejezések, amelyek a fent felsorolt ​​elemek kombinációit tartalmazzák.

A SELECT záradékban felsorolt ​​összes mezőnévnek a GROUP BY záradékban is szerepelnie kell - kivéve, ha az oszlopnevet használják Számítsa ki az egyes vásárlók által végrehajtott vásárlások átlagos mennyiségét.

SELECT Client.LastName, Átl.(Tranzakció.Mennyiség) AS Average_Quantity FROM Client BELSŐ JOIN Trade ON Client.ClientCode=Transaction.ClientCode CSOPORT BY Client.LastName 6.9. példa.

Számítsa ki az egyes vásárlók által végrehajtott vásárlások átlagos mennyiségét. Az „minden ügyfél” kifejezés az SQL-lekérdezésben mondat formájában jelenik meg.

GROUP BY Client.LastName 6.10. példa.

Határozza meg, mennyiért adták el az egyes termékeket. KIVÁLASZTÁSA Termék.Neve, Összeg(Termék.Ár*Tranzakció.Mennyiség) MINT költség A termék BELSŐ CSATLAKOZTATÁSÁRA Termék.ProductCode=Tranzakció.Termékkód CSOPORT Termék.Név SZERINT

6.10. példa. Annak az összegnek a meghatározása, amelyért az egyes termékeket eladták.

SELECT Client.Company, Count(Transaction.TransactionCode) AS Tranzakciók_száma FROM Client BELSŐ JOIN Tranzakció ON Client.ClientCode=Transaction.ClientCode CSOPORT BY Client.Company 6.11. példa.

Az egyes cégek által végrehajtott tranzakciók számának számolása. SELECT Customer.Company, Sum(Transaction.Quantity) AS Total_Quantity, Sum(Term.ár*Tranzakció.Mennyiség) AS költség FROM Termék INNER JOIN (Customer INNER JOIN Tranzakció ON Customer.ClientCode=Transaction.CustomerTProducnsatCode=Termékkód) .Termékkód GROUP BY Client.Company

6.12. példa. Az egyes cégeknél vásárolt áruk teljes mennyiségének és költségének kiszámítása.

6.13. példa. Határozza meg az egyes termékek teljes költségét minden hónapban.

VÁLASZTÁSA Termék.Név, Hónap(Tranzakció.Dátum) AS Hónap, Összeg(Termék.Ár*Tranzakció.Mennyiség) AS Költség FROM Termék BELSŐ CSATLAKOZTATÁSA Termék.Termékkód=Tranzakció.Termékkód CSOPORT Termék.Név, Hónap(Tranzakció.Dátum) ) 6.13. példa.

Az egyes termékek összköltségének meghatározása havonta.

6.14. példa. Határozza meg az egyes első osztályú termékek teljes költségét minden hónapban. VÁLASSZA Termék.Név, Hónap(Tranzakció.Dátum) AS Hónap, Összeg(Termék.Ár*Tranzakció.Mennyiség) AS költség FROM Termék BELSŐ CSATLAKOZTATÁSA Terméken.ProductCode=Tranzakció.Termékkód WHERE Product.Grade="First" GROUP BY Product .Név, hónap(tranzakció.dátum)

6.14. példa.

  • Minden egyes első osztályú termék összköltségének meghatározása havonta.
  • WHERE kizárja azokat a rekordokat, amelyek nem felelnek meg a feltételnek az összesített értékek csoportosítással történő kiszámításából;
  • Az összesített függvények nem adhatók meg a WHERE keresési feltételben.

6.15. példa. Azonosítsa azokat a cégeket, amelyek tranzakcióinak száma meghaladta a hármat.

SELECT Client.Company, Count(Trade.Quantity) AS Number_of_deals FROM Client INNER JOIN Trade ON Client.ClientCode=Transaction.ClientCode CSOPORT BY Client.Company HAVING Count(Tranzakció.Mennyiség)>3 6.15. példa.

Azon cégek azonosítása, amelyek tranzakcióinak teljes száma meghaladta a hármat. 6.16. példa.

Jelenítse meg a 10 000 rubel felett eladott áruk listáját. KIVÁLASZTÁSA Termék neve, Összege (Termék.Ára*Akció.Mennyiség) MINT Költség A termék BELSŐ CSATLAKOZTATÁSÁBÓL A termék.Termékkód=Tranzakció.Termékkód CSOPORT Termék.Név SZERINT HAVING Sum(Term.ár*Ajánlat.Mennyiség)>10000

6.16. példa. A több mint 10 000 rubelért eladott áruk listájának megjelenítése.

6.17. példa. Jelenítse meg a több mint 10 000-ért eladott termékek listáját az összeg megadása nélkül.

SELECT Product.Name FROM FROM termék BELSŐ CSATLAKOZÁS Deal ON Product.ProductCode=Deal.ProductCode GROUP BY BY Product.Name HAVING Sum(Term.Ár*Ajánlat.Mennyiség)>10000 6.17. példa. Jelenítse meg a több mint 10 000-ért eladott termékek listáját az összeg megadása nélkül. Ebben tankönyv megtanulod használni COUNT függvény

V

SQL Server (Transact-SQL) szintaxissal és példákkal. Leírás

SQL Serverben (Transact-SQL)

COUNT függvény

egy mező vagy kifejezés sorainak számát adja vissza az eredményhalmazban.

Szintaxis

Az SQL Server (Transact-SQL) COUNT függvényének szintaxisa a következő:
VAGY a COUNT függvény szintaxisa egy vagy több oszlop eredményeinek csoportosításakor a következő:
Paraméterek vagy érvek
kifejezés1 , kifejezés2 , … kifejezés_n
Olyan kifejezések, amelyek nincsenek bezárva COUNT függvénybe, és amelyeket az SQL utasítás végén lévő GROUP BY záradékban kell szerepeltetni.

az aggregate_expression az az oszlop vagy kifejezés, amelynek nem NULL értékeit számolja a rendszer.

táblák - táblák, amelyekből rekordokat szeretne kapni. Legalább egy táblázatnak szerepelnie kell a FROM záradékban.

WHERE feltételek – nem kötelező. Ezek azok a feltételek, amelyeknek teljesülniük kell a kiválasztott rekordokhoz. Nem NULL értékeket is beleértve Nem mindenki érti ezt, de a COUNT függvény csak azokat a rekordokat számolja meg, ahol a COUNT (aggregate_expression) kifejezés értéke nem NULL. Ha egy kifejezés NULL értéket tartalmaz, az nem szerepel a COUNT számlálóban.

Például, ha rendelkezik a következő, piacok nevű táblával:

Ez példa COUNT 3-at ad vissza, mert a lekérdezés eredménykészletében lévő összes market_id értéke NEM NULL.

Ha azonban a következő SELECT utasítást futtatta, amely a COUNT függvényt használja:

Transact-SQL

SELECT COUNT(filials) FROM piacokról; -- Eredmény: 1

Ez a COUNT példa csak 1-et ad vissza, mivel a lekérdezés eredménykészletében csak egy filials érték NEM NULL. Ez lesz az első olyan sor, amely a filials = "yes" feliratot tartalmazza. Ez az egyetlen sor, amely szerepel a COUNT függvény számításában.

Alkalmazás

A COUNT függvény a következőkben használható SQL verziók Szerver (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Példa egy mezővel

Nézzünk néhányat SQL példák Szerver COUNT függvények, hogy megértsék, hogyan kell használni a COUNT függvényt az SQL Serverben (Transact-SQL).

Például megtudhatja, hogy hány kapcsolata van a last_name = "Rasputin" nevű felhasználónak.

A COUNT függvény ezen példájában a „Névjegyek száma” álnevet adtuk meg a COUNT (*) kifejezéshez. Ezért az eredménykészlet mezőnévként a „Névjegyek száma” értéket fogja mutatni.

Példa a DISTINCT használatára

Használhatja a DISTINCT operátort a COUNT függvényben. Az alábbi SQL-utasítás például azoknak az egyedi részlegeknek a számát adja vissza, ahol legalább egy alkalmazottnál a first_name = 'Samvel'.

A MySQL táblában lévő rekordok számának meghatározásához a speciális COUNT() függvényt kell használni.

A COUNT() függvény a táblázat azon rekordjainak számát adja vissza, amelyek megfelelnek egy adott feltételnek.

A COUNT(kifejezés) függvény mindig csak azokat a sorokat számolja, amelyeknél az expr eredménye NEM NULL.

Ez alól a szabály alól kivételt képez, ha a COUNT() függvényt csillaggal használja argumentumként - COUNT(*) . Ebben az esetben az összes sort számolja, függetlenül attól, hogy NULL vagy NEM NULL.

Például a COUNT(*) függvény a táblázatban lévő rekordok teljes számát adja vissza:

SZÁM(*) KIVÁLASZTÁSA tábla_nevéből

Hogyan kell megszámolni a rekordok számát és megjeleníteni őket a képernyőn

Példa PHP+MySQL kódra a sorok teljes számának megszámlálásához és megjelenítéséhez:

$res = mysql_query("SELECT COUNT(*) FROM FROM table_name") $sor = mysql_fetch_row($res); $összesen = $sor; // összes rekord echo $összesen; ?>

Ez a példa a COUNT() függvény legegyszerűbb használatát mutatja be. De más feladatokat is végrehajthat ezzel a funkcióval.

Ha paraméterként ad meg egy adott táblázatoszlopot, a COUNT(oszlop_neve) függvény visszaadja azon rekordok számát az oszlopban, amelyek nem tartalmaznak NULL értéket. A NULL értékű rekordokat figyelmen kívül hagyja.

KIVÁLASZTÁS A SZÁMLÁT(oszlopnév) FROM táblanévből

A mysql_num_rows() függvény nem használható, mert a rekordok teljes számának megállapításához futnia kell SELECT lekérdezés* FROM db , azaz minden rekord lekérése, de ez nem kívánatos, ezért célszerű a count függvényt használni.

$result = mysql_query("SELECT COUNT (*) mint rec FROM db");

A COUNT() függvény használata példaként

Íme egy másik példa a COUNT() függvény használatára. Tegyük fel, hogy van egy asztali fagylalt fagylalt katalógussal, amely kategóriaazonosítókat és fagylaltneveket tartalmaz.

SZÁMÍTÁSTECHNIKA

Összefoglaló függvények

Az SQL lekérdezési kifejezések gyakran adat-előfeldolgozást igényelnek. Erre a célra speciális függvényeket és kifejezéseket használnak.

Gyakran meg kell találnia, hogy hány rekord felel meg egy adott lekérdezésnek,mennyi egy adott numerikus oszlop értékeinek összege, maximum, minimum és átlagértékei. Erre a célra az úgynevezett végső (statisztikai, összesített) függvényeket használjuk. Az összefoglaló függvények például egy WHERE záradék által meghatározott rekordkészleteket dolgozzák fel. Ha felveszi őket a SELECT utasítást követő oszloplistába, akkor az eredményül kapott tábla nemcsak az adatbázistábla oszlopait fogja tartalmazni, hanem az ezen függvények által számított értékeket is. A következőösszefoglaló függvények listája.

  • COUNT (paraméter ) a paraméterben megadott rekordok számát adja vissza. Ha az összes rekord számát szeretné megkapni, akkor paraméterként a csillag (*) szimbólumot kell megadnia. Ha paraméterként oszlopnevet ad meg, a függvény azoknak a rekordoknak a számát adja vissza, amelyekben az oszlop a NULL-tól eltérő értéket tartalmaz. Ha meg szeretné tudni, hogy egy oszlop hány különböző értéket tartalmaz, írja be az oszlop nevét a DISTINCT kulcsszóval. Például:

SZÁM (*) KIVÁLASZTÁSA AZ ügyfelektől;

SZÁM (Rendelés_összeg) KIVÁLASZTÁSA Vásárlóktól;

KIVÁLASZTÁS SZÁMÁT (KÜLÖNBÖZŐ rendelési_összeg) az ügyfelektől;

A következő lekérdezés futtatása hibaüzenetet eredményez:

Régió KIVÁLASZTÁSA , COUNT(*) FROM ügyfelek ;

  • SUM (paraméter ) a paraméterben megadott oszlop értékeinek összegét adja vissza. A paraméter lehet az oszlop nevét tartalmazó kifejezés is. Például:

ÖSSZEG KIVÁLASZTÁSA (Rendelési_összeg) Vásárlóktól;

Ez az SQL utasítás egy egyoszlopos, egy rekordból álló táblát ad vissza, amely az Ügyfelek tábla Rendelés_összeg oszlopában meghatározott összes érték összegét tartalmazza.

Tegyük fel, hogy a forrástáblázatban az Order_Amount oszlop értékeit rubelben fejezzük ki, és a teljes összeget dollárban kell kiszámítanunk. Ha az aktuális árfolyam például 27,8, akkor a kívánt eredményt a következő kifejezéssel kaphatja meg:

ÖSSZEG KIVÁLASZTÁSA (Rendelési_összeg*27,8) Ügyfelektől;

  • AVG (paraméter ) a paraméterben megadott oszlop összes értékének számtani középértékét adja vissza. A paraméter lehet az oszlop nevét tartalmazó kifejezés. Például:

AVG (Rendelés_összeg) VÁLASZTÁSA Ügyfelektől;

SELECT AVG (Order_Amount*27.8) FROM Clients

HOL Régió<>"Észak_3nyugat";

  • MAX (paraméter ) a maximális értéket adja vissza a paraméterben megadott oszlopban. A paraméter lehet az oszlop nevét tartalmazó kifejezés is. Például:

SELECT MAX(Rendelés_összeg) AZ ügyfelektől;

SELECT MAX(Rendelés_összeg*27,8) Ügyfelektől

AHOL Régió<>"Észak_3nyugat";

  • MIN (paraméter ) a minimális értéket adja vissza a paraméterben megadott oszlopban. A paraméter lehet az oszlop nevét tartalmazó kifejezés. Például:

MIN(RENDELÉSI_ÖSSZEG) KIVÁLASZTÁS AZ ügyfelektől;

MIN. KIVÁLASZTÁS (Rendelési összeg*27,8) Ügyfelektől

AHOL Régió<>"Észak_3nyugat";

A gyakorlatban gyakran szükséges egy összefoglaló táblázat beszerzése, amely tartalmazza a numerikus oszlopok összesített, átlagos, maximális és minimális értékét. Ehhez használja a csoportosítást (GROUP BY) és az összegző függvényeket.

SELECT régió, SUM (Rendelési_összeg) Vásárlóktól

GROUP BY Régió;

Ennek a lekérdezésnek az eredménytáblázata tartalmazza a régiók nevét és a megfelelő régiókból származó összes ügyféltől érkező rendelések teljes (teljes) mennyiségét (5. ábra).

Most fontolja meg a kérést az összes összesített adat régiónkénti beszerzésére:

SELECT régió, SUM (Rendelés_összeg), AVG (Rendelési_összeg), MAX(Rendelési_összeg), MIN (Rendelési_összeg)

Ügyfelektől

GROUP BY Régió;

Az eredeti és az eredménytáblázat a ábrán látható. 8. A példában csak az észak-nyugati régiót képviseli a forrástáblázatban több rekord. Ezért a hozzá tartozó eredménytáblázatban a különböző összegző függvények különböző értékeket adnak.

Rizs. 8. A rendelési összegek zárótáblázata régiónként

Ha összegző függvényeket használ egy oszloplistán egy SELECT utasításban, az eredménytáblázat megfelelő oszlopainak fejlécei Expr1001, Expr1002 és így tovább. (vagy valami hasonló, az SQL implementációtól függően). Azonban saját belátása szerint beállíthat fejlécet az összegző függvények és más oszlopok értékéhez. Ehhez közvetlenül a SELECT utasítás oszlopa után adja meg az űrlap kifejezését:

AS oszlop_fejléce

Az AS (as) kulcsszó azt jelenti, hogy az eredménytáblázatban a megfelelő oszlopnak rendelkeznie kell az AS után megadott fejléccel. A hozzárendelt címet aliasnak is nevezik. A következő példa (9. ábra) álneveket állít be az összes számított oszlophoz:

régió kiválasztása,

ÖSSZEG (Order_amount) AS [Rendelés_összesen],

AVG (Order_Amount) AS [Átlagos rendelési összeg],

MAX(Order_Amount) AS Maximum,

MIN (Rendelési_összeg) AS Minimum,

Ügyfelektől

GROUP BY Régió;

Rizs. 9. A rendelési összegek zárótáblázata régiónként oszlopálnevek használatával

A több szóból álló, szóközzel elválasztott becenevek szögletes zárójelben vannak.

Az összefoglaló függvények a SELECT és a HAVING záradékokban használhatók, de nem használhatók a WHERE záradékokban. A HAVING operátor hasonló a WHERE operátorhoz, de a WHERE-től eltérően csoportokban választja ki a rekordokat.

Tegyük fel, hogy szeretné meghatározni, hogy mely régiókban van egynél több ügyfél. Erre a célra a következő lekérdezést használhatja:

Régió KIVÁLASZTÁSA , Szám (*)

Ügyfelektől

CSOPORTOSÍTÁS RÉGIÓ SZERINT HAVING COUNT(*) > 1;

Értékfeldolgozási funkciók

Az adatokkal való munka során gyakran kell azokat feldolgozni (a kívánt formára alakítani): ki kell választani egy részstringet a karakterláncban, eltávolítani a kezdő és záró szóközöket, kerekíteni egy számot, kiszámítani a négyzetgyököt, meghatározni az aktuális időt, stb. SQL a következő három típusú funkcióval rendelkezik:

  • karakterlánc-függvények;
  • numerikus függvények;
  • dátum-idő függvények.

String függvények

A karakterlánc-függvények egy karakterláncot vesznek fel paraméterként, és feldolgozás után egy karakterláncot vagy NULL-t adnak vissza.

  • SUBSTRING (sor elejétől)a paraméterként megadott karakterláncból eredő részkarakterláncot adja vissza vonalat. Alkarakterlánc azzal a karakterrel kezdődik, amelynek sorozatszáma a start paraméterben van megadva, és hossza a hossz paraméterben megadott. A sorban lévő karakterek balról jobbra vannak számozva, 1-től kezdve. A szögletes zárójelek itt csak azt jelzik, hogy a beléjük zárt kifejezés nem kötelező. Ha a kifejezés hosszára nincs használatban, akkor egy részkarakterlánc a indul és az eredeti sor végéig. Paraméterértékek kezdete és hossza úgy kell kiválasztani, hogy a keresett részkarakterlánc valóban az eredeti karakterláncon belül legyen. Ellenkező esetben a SUBSTRING függvény NULL értéket ad vissza.

Például:

SUBSTRING ("Kedves Mása!" 9-től 4-től) a következőt adja vissza: "Masha";

SUBSTRING ("Kedves Mása!" 9-től) a következőt adja vissza: "Masha!";

SUBSTRING ("Kedves Mása!" FROM 15) NULL-t ad vissza.

Használhatja ezt a függvényt egy SQL kifejezésben, például így:

SELECT * FROM ügyfelek

WHERE SUBSTRING(Régió FROM 1 FOR 5) = "Észak";

  • UPPER(karakterlánc ) a paraméterben megadott karakterlánc összes karakterét nagybetűvé alakítja.
  • LOWER(karakterlánc ) a paraméterben megadott karakterlánc összes karakterét kisbetűvé alakítja.
  • TRIM (LEADING | TRAILING | BOTH ["karakter"] FROM karakterlánc). ) eltávolítja a bevezető (LEADING), a záró (TRAILING) vagy mindkét (BOTH) karaktert a karakterláncból. Alapértelmezés szerint az eltávolítandó karakter egy szóköz (" "), így elhagyható. Leggyakrabban ezt a funkciót szóközök eltávolítására használják.

Például:

TRIM (VEZETŐ "Szentpétervár városából") forgatja "Szentpétervár városát";

TRIM(TRALING " " FROM "Szentpétervár város") visszaadja "Szentpétervár városa";

TRIM (MINDKE " " FROM " city St. Petersburg ") visszaadja a "város St. Petersburg" kifejezést;

TRIM (MINDKE A "Szentpétervár városából") visszaadja a "Szentpétervár városát";

TRIM (MINDKE "G" FROM "Szentpétervár városa") a "Szentpétervár városát" adja vissza.

Ezek közül a függvények közül a leggyakrabban használt a SUBSTRING() ÉS TRIM().

Numerikus függvények

A numerikus függvények nem csak numerikus adatokat fogadhatnak el paraméterként, hanem mindig számot vagy NULL-t (undefined value) adnak vissza.

  • HELYZET ( targetString IN string) megkeresi a célkarakterlánc előfordulását a megadott karakterláncban. Ha a keresés sikeres, akkor az első karakter pozíciószámát adja vissza, ellenkező esetben 0. Ha a cél karakterlánc hossza nulla (például a " " karakterlánc), akkor a függvény 1-et ad vissza. Ha legalább az egyik paraméter NULL , akkor NULL-t ad vissza. A sor karakterei balról jobbra vannak számozva, 1-től kezdve.

Például:

POSITION("e" IN "Helló mindenkinek") 5-öt ad vissza;

POSITION ("mindenki" A "Hello mindenkinek"-ban) 8-at ad vissza;

POSITION(" " Hello mindenkinek") 1-et ad vissza;

A POSITION("Szervusz!" IN "Helló mindenkinek") 0-t ad vissza.

Az Ügyfelek táblázatban (lásd 1. ábra) a Cím oszlop a városnéven kívül irányítószámot, utcanevet és egyéb adatokat is tartalmaz. Előfordulhat, hogy egy adott városban élő ügyfelek rekordjait kell kiválasztania. Tehát, ha a Szentpéterváron élő ügyfelekkel kapcsolatos rekordokat kívánja kiválasztani, akkor a következő SQL lekérdezési kifejezést használhatja:

SELECT * FROM ügyfelek

WHERE POSITION (" St. Petersburg " IN Cím ) > 0;

Vegye figyelembe, hogy ez az egyszerű lekérdezés az adatok lekérésére másképpen is megfogalmazható:

SELECT * FROM ügyfelek

WHERE Cím MINT "%Petersburg%";

  • EXTRACT (paraméter ) kivon egy elemet egy dátum-idő értékből vagy egy intervallumból. Például:

KIVONAT (HÓNAP A "2005-10-25" DÁTUMOTÓL) visszaadja a 10-et.

  • CHARACTER_LENGTH(karakterlánc ) a karakterláncban lévő karakterek számát adja vissza.

Például:

CHARACTER_LENGTH("Üdv mindenkinek") 11-et ad vissza.

  • OCTET_LENGTH(karakterlánc ) a karakterláncban lévő oktettek (bájtok) számát adja vissza. Minden latin vagy cirill karakter egy bájttal, a kínai ábécé karaktere pedig két bájttal van ábrázolva.
  • KARDINALITÁS (paraméter ) egy elemgyűjteményt vesz paraméterként, és visszaadja a gyűjtemény elemeinek számát (kardinális szám). Egy gyűjtemény lehet például egy tömb vagy egy multihalmaz, amely különböző típusú elemeket tartalmaz.
  • ABS (szám ) egy szám abszolút értékét adja vissza. Például:

Az ABS (-123) 123-at ad vissza;

Az ABS (2-5) 3-at ad vissza.

  • MO D (szám1, szám2 ) az első szám egész számmal való osztásának maradékát adja vissza a másodikkal. Például:

MOD(5;h) 2-t ad vissza;

MOD(2;h) 0-t ad vissza.

  • LN (szám ) egy szám természetes logaritmusát adja vissza.
  • EXP (szám) a számot adja vissza (a természetes logaritmus alapja a szám hatványához).
  • POWER (szám1, szám2 ) az 1-es számot adja vissza szám2 (szám1 a szám2 hatványához).
  • SQRT (szám ) egy szám négyzetgyökét adja vissza.
  • EMELET (szám ) a paraméter által megadott értéket meg nem haladó legnagyobb egész számot adja vissza (lefelé kerekítés). Például:

A FLOOR (5.123) 5.0 értéket ad vissza.

  • CEIL (szám) vagy CEILING (szám ) a legkisebb egész számot adja vissza, amely nem kisebb, mint a felfelé kerekítés paraméterben megadott érték). Például:

A CEIL(5.123) 6.0-t ad vissza.

  • WIDTH_BUCKET (szám1, szám2, szám3, szám4) 0 és szám4 + 1 közötti egész számot ad vissza. A szám2 és szám3 paraméterek egyenlő intervallumokra osztott numerikus intervallumot adnak meg, amelyek számát a szám4 paraméter határozza meg annak az intervallumnak a száma, amelybe az érték esik szám1. Ha a szám1 kívül esik a megadott tartományon, akkor a függvény 0-t vagy 4 + 1-et ad vissza. Például:

WIDTH_BUCKET(3,14; 0; 9; 5) 2-t ad vissza.

Dátum-idő funkciók

Az SQL-nek három olyan függvénye van, amelyek az aktuális dátumot és időt adják vissza.

  • CURRENT_DATE az aktuális dátumot adja vissza (írja be: DATE).

Például: 2005-06-18.

  • CURRENT_TIME (szám ) az aktuális időt adja vissza (TIME típusú). Az egész szám paraméter határozza meg a másodperces ábrázolás pontosságát. Például a 2-es érték a másodperceket jelenti a legközelebbi századig (két tizedesjegyig):

12:39:45.27.

  • CURRENT_TIMESTAMP (szám ) a dátumot és az időt adja vissza (TIMESTAMP típus). Például 2005-06-18 12:39:45.27. Az egész szám paraméter határozza meg a másodperces ábrázolás pontosságát.

Vegye figyelembe, hogy az ezen függvények által visszaadott dátum és idő nem karaktertípus. Ha karakterláncként kell ábrázolni őket, akkor ehhez a CAST() típusú konverziós függvényt kell használni.

A dátum-idő függvényeket általában az adatok beszúrására, frissítésére és törlésére szolgáló lekérdezésekben használják. Például az értékesítési információk rögzítésekor adja meg aktuális dátumés az idő. Egy hónap vagy negyedév eredményeinek összesítése után a jelentési időszak értékesítési adatai törölhetők.

Számított kifejezések

A kiszámított kifejezéseket konstansokból (numerikus, karakterlánc, logikai), függvényekből, mezőnevekből és más típusú adatokból állítják össze úgy, hogy azokat aritmetikai, karakterlánc-, logikai és egyéb operátorokkal kapcsolják össze. A kifejezések operátorok segítségével összetettebb (összetett) kifejezésekké kombinálhatók. A zárójelek a kifejezések kiértékelési sorrendjének szabályozására szolgálnak.

Logikai operátorok ÉS, VAGY és NEM és függvények már korábban megbeszélték.

Aritmetikai operátorok:

  • + hozzáadás;
  • - kivonás;
  • * szorzás;
  • / felosztás.

String operátorcsak egy összefűzési vagy karakterlánc-összefűzési operátor (| |). Egyes SQL implementációkban (pl. Microsoft Access) a (| |) helyett a (+) jelet használjuk. Az összefűzési operátor hozzáfűzi a második karakterláncot az első példa végéhez, a kifejezéshez:

"Sasha" | | "szeret" | | "Hullámzás"

visszaadja a "Sasha loves Masha" karakterláncot ennek eredményeként.

Kifejezések összeállításakor ügyelni kell arra, hogy az operátorok operandusai érvényes típusúak legyenek. Például a 123 + "Sasha" kifejezés nem érvényes, mert az aritmetikai összeadás operátort egy karakterlánc-operandusra alkalmazzák.

A kiszámított kifejezések ezután jelenhetnek meg SELECT utasítás, valamint a WHERE és HAVI utasítások feltételkifejezéseiben N.G.

Nézzünk néhány példát.

Hagyja, hogy az Értékesítés táblázat tartalmazza a Terméktípus, Mennyiség és Ár oszlopokat, és szeretnénk tudni az egyes terméktípusok bevételét. Ehhez csak írja be a Mennyiség*Ár kifejezést a SELECT utasítás utáni oszlopok listájába:

KIVÁLASZTÁS Terméktípus, Mennyiség, Ár, Mennyiség*ár MINT

Összesen FROM értékesítés;

Ez az AS (as) kulcsszót használja a számított adatoszlop álnevének megadásához.

ábrán. A 10. ábra az eredeti értékesítési táblát és a lekérdezés eredménytábláját mutatja.

Rizs. 10. A lekérdezés eredménye az egyes terméktípusok bevételének kiszámításával

Ha meg szeretné tudni az összes áru eladásából származó teljes bevételt, használja a következő lekérdezést:

ÖSSZEG KIVÁLASZTÁSA (Mennyiség*Ár) Értékesítéstől;

A következő lekérdezés számított kifejezéseket tartalmaz mind az oszloplistában, mind a WHERE záradék feltételében. Az értékesítési táblázatból kiválasztja azokat a termékeket, amelyek árbevétele meghaladja az 1000-et:

SELECT Termék_típus, Mennyiség*Ár összesen

Az értékesítésből

WHERE Mennyiség*Ár > 1000;

Tegyük fel, hogy olyan táblázatot szeretne kapni, amely két oszlopból áll:

A termék típusát és árát tartalmazó termék;

A bevételt tartalmazó teljes összeg.

Mivel az eredeti értékesítési táblázatban feltételezzük, hogy a Product_Type oszlop karakteres (CHAR típusú), az Ár oszlop pedig numerikus, az ezekből az oszlopokból származó adatok összevonásakor (ragasztásakor) szükséges a numerikus típust karaktertípusba önteni a CAST() függvény. A feladatot végrehajtó lekérdezés így néz ki (11. ábra):

KIVÁLASZTÁS Terméktípus | | " (Ár: " | | CAST(Ár AS CHAR(5)) | | ")" AS termék, mennyiség* ár összesen

FROM Értékesítés;

Rizs. 11. Különféle típusú adatokat egy oszlopban kombináló lekérdezés eredménye

Jegyzet. A Microsoft Accessben egy hasonló lekérdezés így nézne ki:

SELECT Product_Type + " (ár: " + C Str (Ár) + ")" AS tétel,

Mennyiség*ár összesen

FROM Értékesítés;

Feltételes kifejezések CASE utasítással

A hagyományos programozási nyelvek feltételes ugrás operátorokkal rendelkeznek, amelyek lehetővé teszik a számítási folyamat vezérlését attól függően, hogy bizonyos feltétel igaz-e vagy sem. SQL-ben ez az operátor a CASE (eset, körülmény, eset). Az SQL:2003-ban ez az operátor értéket ad vissza, ezért használható kifejezésekben. Két fő formája van, amelyeket ebben a részben fogunk megvizsgálni.

CASE utasítás értékekkel

Az értékeket tartalmazó CASE utasítás a következő szintaxissal rendelkezik:

CASE ellenőrzött_érték

WHEN érték1 THEN eredmény1

WHEN érték2 THEN eredmény2

. . .

AMIKOR N értéke, AKKOR N eredménye

EGYÉB eredményX

Amennyiben ellenőrzött_érték egyenlő érték1 , a CASE utasítás visszaadja az értéket eredmény1 , a THEN kulcsszó után van megadva. Ellenkező esetben a checked_value összehasonlításra kerülérték2 , és ha egyenlők, akkor az eredmény2 értéket adjuk vissza. Ellenkező esetben a tesztelt értéket összehasonlítja a WHEN kulcsszó után megadott következő értékkel, stb. Ha a tesztelt_érték egyikkel sem egyenlő, akkor a rendszer az értéket adja vissza. eredmény X , az ELSE (else) kulcsszó után van megadva.

Az ELSE kulcsszó nem kötelező. Ha hiányzik, és az összehasonlított értékek egyike sem egyezik meg a tesztelt értékkel, akkor a CASE utasítás NULL-t ad vissza.

Tegyük fel, hogy az Ügyfelek tábla alapján (lásd 1. ábra) szeretne kapni egy táblázatot, amelyben a régiók neveit a kódszámaik helyettesítik. Ha nincs túl sok különböző régió a forrástáblázatban, akkor a probléma megoldásához célszerű egy lekérdezést használni a CASE operátorral:

SELECT név, cím,

CASE régió

AMIKOR "Moszkva" AKKOR "77"

AMIKOR "Tver régió", akkor "69"

. . .

ELSE Régió

AS Régió kód

Ügyfelektől;

CASE utasítás keresési feltételekkel

A CASE operátor második formája azt jelenti, hogy egy táblában keresik azokat a rekordokat, amelyek megfelelnek egy bizonyos feltételnek:

ÜGY

MIKOR feltétel1 THEN eredmény1

AMIKOR fogás2 AKKOR eredmény2

. . .

MIKOR N feltétel, akkor N eredmény

EGYÉB eredményX

A CASE utasítás azt teszteli, hogy a feltétel1 igaz-e a WHERE záradék által meghatározott halmaz első rekordjára, vagy a teljes táblára, ha a WHERE nincs jelen. Ha igen, akkor a CASE eredmény1-et ad vissza. Ellenkező esetben a feltétel2 ellenőrzésre kerül ehhez a rekordhoz. Ha igaz, akkor az eredmény2 értéket adja vissza, stb. Ha egyik feltétel sem igaz, akkor az eredmény értéket adja vissza X , az ELSE kulcsszó után van megadva.

Az ELSE kulcsszó nem kötelező. Ha hiányzik, és egyik feltétel sem teljesül, a CASE utasítás NULL értéket vált. Miután a CASE-t tartalmazó utasítás végrehajtásra került az első rekordnál, az továbblép a következő rekordra. Ez addig folytatódik, amíg a teljes rekordkészletet fel nem dolgozták.

Tegyük fel, hogy egy könyvtáblázatban (cím, ár) egy oszlop NULL, ha a megfelelő könyv elfogyott. A következő lekérdezés egy olyan táblázatot ad vissza, amely a NULL helyett az „Out of stock” (Kifogyott) szöveget jeleníti meg:

Cím kiválasztása,

ÜGY

AMIKOR az ár NULLA, AKKOR „Kifogyott”

EGYÉB SZEREPÍTÉS (Ár KARBANTARTÓ(8))

AS ár

A könyvekből;

Ugyanabban az oszlopban minden értéknek azonos típusúnak kell lennie. Ezért be ezt a kérést A CAST típusú konverziós funkció az Ár oszlop numerikus értékeinek karaktertípussá alakítására szolgál.

Vegye figyelembe, hogy mindig használhatja a CASE utasítás második formáját az első helyett:

ÜGY

WHEN tesztelt_érték = érték1 THEN eredmény1

WHEN tesztelt_érték = érték2 AKKOR eredmény2

. . .

WHEN checked_value = érték N MAJD eredményN

EGYÉB eredmény

NULLIF és COALESCE függvények

Bizonyos esetekben, különösen az adatok frissítésére vonatkozó kéréseknél (UPDATE operátor), célszerű a tömörebb NULLIF() (NULL if) és COALESCE() (kombináció) függvényeket használni a nehézkes CASE operátor helyett.

NULLIF függvény ( érték1, érték2) NULL értéket ad vissza, ha az első paraméter értéke megegyezik a második paraméter értékével, eltérés esetén az első paraméter értéke változatlan. Vagyis ha az egyenlőség érték1 = érték2 igaz, akkor a függvény NULL-t ad vissza, ellenkező esetben az érték1 értéket.

Ez a függvény a következő két formában egyenértékű a CASE utasítással:

  • CASE érték1

WHEN érték2 THEN NULL

ELSE érték1

  • ÜGY

WHEN érték1 = érték2 THEN NULL

ELSE érték1

COALESCE( érték1, érték2, ... , N érték) elfogad egy értéklistát, amely lehet határozott vagy nulla. A függvény egy listából megadott értéket ad vissza, vagy NULL értéket ad vissza, ha minden érték nincs meghatározva.

Ez a függvény egyenértékű a következő CASE utasítással:

ÜGY

AMIKOR az 1. érték NEM NULL, AKKOR az 1. érték

AMIKOR a 2. érték NEM NULL, AKKOR a 2. érték

. . .

AMIKOR N érték NEM NULL, AKKOR N érték

ELSE NULL

Tegyük fel, hogy a Könyvek (cím, ár) táblázatban az Ár oszlop NULL, ha a megfelelő könyv elfogyott. A következő lekérdezés egy táblát ad vissza, ahol ahelyett NULL Megjelenik az "Elfogyott" szöveg:

SELECT név, COALESCE (CAST (Ár, mint CHAR(8)),

"Elfogyott") AS ár

A könyvekből;

Hogyan tudhatom meg az adott szállító által gyártott PC-modellek számát? Hogyan határozható meg az azonos típusú számítógépek átlagára műszaki specifikációk? Ezekre és sok más, néhány statisztikai információhoz kapcsolódó kérdésre a segítségével válaszolhatunk A lekérdezés a beépített Év és hónap függvényeket használja az év és a hónap kinyerésére egy dátumból.. A szabvány a következő összesített függvényeket biztosítja:

Mindezek a függvények egyetlen értéket adnak vissza. Ugyanakkor a funkciókat COUNT, MINÉs MAX bármely adattípusra alkalmazható, míg ÖSSZEGÉs AVG csak numerikus mezőkhöz használatosak. Funkciók közötti különbség COUNT(*)És COUNT(<имя поля>) az, hogy a második nem veszi figyelembe a NULL értékeket a számítás során.

Példa. Keresse meg a személyi számítógépek minimális és maximális árát:

Példa. Keresse meg az A gyártó által gyártott számítógépek elérhető számát:

Példa. Ha érdekel minket a mennyiség különféle modellek, amelyet az A gyártó készített, akkor a lekérdezés a következőképpen fogalmazható meg (azzal, hogy a Termék táblában minden modell egyszer szerepel):

Példa. Keresse meg az A gyártó által gyártott különböző modellek számát. A lekérdezés hasonló az előzőhöz, amelyben meg kellett határozni teljes szám Az A gyártó által gyártott modellek. Itt is meg kell találnia a PC-táblázatban a különböző modellek számát (azaz kereskedelmi forgalomban kapható).

Annak biztosítása érdekében, hogy csak egyedi értékeket használjanak a statisztikai mutatók megszerzésekor, amikor aggregált függvények argumentuma használható DISTINCT paraméter. Másik paraméter ALL az alapértelmezett, és feltételezi, hogy az oszlopban lévő összes visszaadott értéket megszámolja. Operátor,

Ha meg kell szereznünk a gyártott PC-modellek számát mindenki gyártó, akkor használnia kell GROUP BY záradék, szintaktikailag követi WHERE záradékok.

átlagos ár

GROUP BY záradék a kimeneti karakterláncok csoportjainak meghatározására szolgál, amelyekre alkalmazni lehet összesítő függvények (COUNT, MIN, MAX, AVG és SUM). Ha ez a záradék hiányzik, és összesítő függvényeket használnak, akkor az összes olyan oszlopot, amelyeknek neve szerepel KIVÁLASZTÁS, bele kell foglalni összesített függvények, és ezek a függvények a lekérdezési predikátumot kielégítő sorok teljes halmazára vonatkoznak. Ellenkező esetben a SELECT lista összes oszlopa nem tartalmazza az összesített függvényeket kell megadni a GROUP BY záradékban. Ennek eredményeként az összes kimeneti lekérdezési sor csoportokra van osztva, amelyeket ezekben az oszlopokban ugyanazok az értékek kombinációi jellemeznek.
Ezt követően az összesített függvények minden csoportra vonatkoznak. Kérjük, vegye figyelembe, hogy a GROUP BY esetén minden NULL értéket egyenlőnek tekintünk, pl. NULL értékeket tartalmazó mező alapján történő csoportosításkor minden ilyen sor egy csoportba fog tartozni. Ha ha van egy GROUP BY záradék , a SELECT záradékban nincsenek összesített függvények
, akkor a lekérdezés egyszerűen egy sort ad vissza minden csoportból. Ez a funkció a DISTINCT kulcsszóval együtt használható az eredménykészlet ismétlődő sorainak kiküszöbölésére.
Nézzünk egy egyszerű példát:
SELECT modell, COUNT(modell) AS Mennyiség_modell, AVG(ár) AS Átl.ár
PC-RŐL

GROUP BY modell; Ebben a kérésben minden PC-modell esetében meghatározásra került a számuk és az átlagos költségük. Minden vonalat ugyanazok az értékek
a modell (modellszám) egy csoportot alkot, és a SELECT kimenet kiszámítja az értékek számát és az átlagos árértékeket az egyes csoportokhoz. A lekérdezés eredménye a következő táblázat lesz: modell Mennyiség_modell
1121 3 850.0
1232 4 425.0
1233 3 843.33333333333337
1260 1 350.0

Átl._ár

Ha a KIVÁLASZTÁS tartalmazna dátum oszlopot, akkor ezeket a mutatókat minden egyes dátumra ki lehet számítani. Ehhez fel kell vennie a dátumot csoportosító oszlopként, majd az összesített függvények kiszámításra kerülnek minden egyes értékkombinációhoz (modell-dátum). Számos konkrét:

  • az aggregált funkciók ellátásának szabályait Ha a kérés következtében nem érkezett sor
  • (vagy egynél több sor egy adott csoporthoz), akkor nincs forrásadat az összesített függvény kiszámításához. Ebben az esetben a COUNT függvények eredménye nulla, az összes többi függvény eredménye NULL lesz.Érv aggregált függvény maga nem tartalmazhat összesített függvényeket
  • (függvény a függvényből). Azok. egy lekérdezésben lehetetlen, mondjuk, az átlagértékek maximumát megszerezni. A COUNT függvény végrehajtásának eredménye az egész szám
  • (EGÉSZ SZÁM). Más összesítő függvények öröklik az általuk feldolgozott értékek adattípusait. Ha a SUM függvény olyan eredményt ad, amely nagyobb, mint a használt adattípus maximális értéke,.

hiba Tehát, ha a kérés nem tartalmazza GROUP BY záradékok összesített függvények, Azt tartalmazza SELECT záradék GROUP BY záradék, végrehajtásra kerülnek az összes eredményül kapott lekérdezési sorban. Ha a kérés tartalmazza , minden olyan sorkészlet, amely egy oszlopban vagy oszlopcsoportban azonos értékekkel rendelkezik GROUP BY záradék összesített függvények csoportonként külön-külön végzik el.

Az egyes termékek összköltségének meghatározása havonta.

Ezt követően az összesített függvények minden csoportra vonatkoznak. Kérjük, vegye figyelembe, hogy a GROUP BY esetén minden NULL értéket egyenlőnek tekintünk, pl. NULL értékeket tartalmazó mező alapján történő csoportosításkor minden ilyen sor egy csoportba fog tartozni. WHERE záradék definiál egy predikátumot a sorok szűrésére, akkor VAN ajánlat vonatkozik csoportosítás után hasonló predikátum meghatározásához, amely értékek alapján szűri a csoportokat összesített függvények. Ez a záradék a használatával kapott értékek érvényesítéséhez szükséges aggregált függvény pontban meghatározott rekordforrás egyes soraiból nem FROM záradék, és től ilyen vonalak csoportjai. Ezért egy ilyen csekket nem lehet tartalmazni WHERE záradék.