Agregované funkcie v jazyku SQL. Používanie agregačných funkcií SQL

  • 29.07.2019

Lekcia sa bude zaoberať témou sql premenovania stĺpca (polí) pomocou servisného slova AS; Zaoberá sa aj témou agregačných funkcií v sql. O konkrétnych príkladoch žiadostí sa bude diskutovať

Názvy stĺpcov v dopytoch je možné premenovať. Vďaka tomu sú výsledky čitateľnejšie.

V SQL zahŕňa premenovanie polí použitie AS kľúčové slovo, ktorý sa používa na premenovanie názvov polí v množinách výsledkov

Syntax:

SELECT<имя поля>AS<псевдоним>OD...

Pozrime sa na príklad premenovania v SQL:

Príklad databázy „Inštitút“: Zobrazte mená učiteľov a ich platy, pre tých učiteľov, ktorých plat je nižší ako 15 000, premenujte pole zarplata na "nízky_plat"


✍ Riešenie:

Premenovanie stĺpcov v SQL je často potrebné pri výpočte hodnôt spojených s viacerými poľami tabuľky. Pozrime sa na príklad:

Príklad databázy „Inštitút“: Z tabuľky učiteľov zobrazte pole s názvom a vypočítajte výšku platu a odmeny, pričom pole pomenujte "platový_bonus"


✍ Riešenie:
1 2 SELECT meno, (zarplata+ premia) AS zarplata_premia FROM učiteľov;

SELECT meno, (zarplata+premia) AS zarplata_premia FROM učiteľov;

výsledok:

Súhrnné funkcie v SQL

Na získanie celkových hodnôt a vyhodnotenie výrazov sa používajú agregačné funkcie v sql:

Všetky agregované funkcie vrátia jednu hodnotu.

Funkcie COUNT, MIN a MAX sa vzťahujú na akýkoľvek typ údajov.

Funkcie SUM a AVG sa používajú iba pre číselné polia.
Medzi funkciami COUNT(*) a COUNT() je rozdiel: druhá pri výpočte nezohľadňuje hodnoty NULL.

Dôležité: Pri práci s agregovanými funkciami v SQL sa používa funkčné slovo AS


Príklad databázy „Inštitút“: Získajte hodnotu najvyššieho platu medzi učiteľmi, zobrazte výsledok ako "max_plat"


✍ Riešenie:
SELECT MAX (zarplata) AKO max_plat OD ucitelov;

SELECT MAX(zarplata) AKO max_plat OD ucitelov;

Výsledky:

Pozrime sa na zložitejší príklad použitia agregačných funkcií v sql.


✍ Riešenie:

Klauzula GROUP BY v SQL

Zoskupenie podľa operátora v SQL sa zvyčajne používa v spojení s agregačnými funkciami.

Agregačné funkcie sa vykonávajú na všetkých výsledných riadkoch dotazu. Ak dotaz obsahuje klauzulu GROUP BY, každá množina riadkov špecifikovaná v klauzule GROUP BY tvorí skupinu a vykonajú sa súhrnné funkcie pre každú skupinu zvlášť.

Pozrime sa na príklad s tabuľkou lekcií:

Príklad:

Dôležité: Takže pomocou GROUP BY sú všetky riadky výstupu dotazu rozdelené do skupín charakterizovaných rovnakými kombináciami hodnôt v týchto stĺpcoch (to znamená, že agregačné funkcie sa vykonávajú pre každú skupinu samostatne).

Stojí za zváženie, že pri zoskupení podľa poľa obsahujúceho hodnoty NULL budú všetky takéto záznamy spadať do jednej skupiny.

Pre rôzne typy tlačiarní určite ich priemernú cenu a množstvo (t. j. zvlášť pre laserové, atramentové a matricové). Použite agregačné funkcie. Výsledok by mal vyzerať takto:

S príkazom SQL

Klauzula HAVING v SQL je potrebná na kontrolu hodnôt, ktoré sa získajú pomocou agregačnej funkcie po zoskupení(po použití GROUP BY). Taká kontrola nemôže byť obsiahnuté v klauzule WHERE.

Príklad: DB Počítačový obchod. Vypočítajte priemernú cenu počítačov s rovnakou rýchlosťou procesora. Vykonajte výpočty len pre tie skupiny, ktorých priemerná cena je nižšia ako 30 000.

Nasledujúce podsekcie popisujú ďalšie klauzuly príkazu SELECT, ktoré možno použiť v dotazoch, ako aj súhrnné funkcie a množiny príkazov. Pripomíname, že v tomto bode sme sa zaoberali použitím klauzuly WHERE a v tomto článku sa pozrieme na klauzuly GROUP BY, ORDER BY a HAVING a poskytneme niekoľko príkladov použitia týchto klauzúl v spojení s agregačnými funkciami. ktoré sú podporované v Transact-SQL.

klauzula GROUP BY

Ponuka GROUP BY zoskupuje vybranú množinu riadkov na vytvorenie množiny súhrnných riadkov podľa hodnôt jedného alebo viacerých stĺpcov alebo výrazov. Jednoduchý prípad použitia klauzuly GROUP BY je zobrazený v príklade nižšie:

USE SampleDb; SELECT Job FROM Works_On GROUP BY Job;

Tento príklad vyberá a zoskupuje pozície zamestnancov.

Vo vyššie uvedenom príklade klauzula GROUP BY vytvorí samostatnú skupinu pre všetky možné hodnoty (vrátane hodnoty NULL) pre stĺpec Job.

Použitie stĺpcov v klauzule GROUP BY musí spĺňať určité podmienky. Konkrétne, každý stĺpec vo výberovom zozname dotazu sa musí objaviť aj v klauzule GROUP BY. Táto požiadavka sa nevzťahuje na konštanty a stĺpce, ktoré sú súčasťou súhrnnej funkcie. (Agregačné funkcie sú uvedené v ďalšej podsekcii.) Dáva to zmysel, pretože... Iba stĺpce v klauzule GROUP BY majú zaručenú jednu hodnotu na skupinu.

Tabuľku môžete zoskupiť podľa ľubovoľnej kombinácie jej stĺpcov. Príklad nižšie ukazuje zoskupenie riadkov tabuľky Works_on do dvoch stĺpcov:

USE SampleDb; SELECT ProjectNumber, Job FROM Works_On GROUP BY ProjectNumber, Job;

Výsledok tohto dotazu:

Na základe výsledkov dotazu môžete vidieť, že existuje deväť skupín s rôznymi kombináciami čísla projektu a pozície. Poradie názvov stĺpcov v klauzule GROUP BY nemusí byť rovnaké ako v zozname stĺpcov v SELECT.

Súhrnné funkcie

Na získanie celkových hodnôt sa používajú súhrnné funkcie. Všetky agregované funkcie možno rozdeliť do nasledujúcich kategórií:

    bežné agregované funkcie;

    štatistické agregované funkcie;

    užívateľsky definované agregované funkcie;

    analytické agregátne funkcie.

Tu sa pozrieme na prvé tri typy agregovaných funkcií.

Bežné agregačné funkcie

Transact-SQL podporuje nasledujúcich šesť agregovaných funkcií: MIN, MAX, SUM, AVG, COUNT, COUNT_BIG.

Všetky agregačné funkcie vykonávajú výpočty s jedným argumentom, ktorým môže byť stĺpec alebo výraz. (Jediná výnimka je druhá forma dvoch funkcií: COUNT a COUNT_BIG, konkrétne COUNT(*) a COUNT_BIG(*), v tomto poradí.) Výsledkom každého výpočtu agregovanej funkcie je konštantná hodnota zobrazená v samostatnom stĺpci výsledkov.

Agregačné funkcie sú špecifikované v zozname stĺpcov príkazu SELECT, ktorý môže obsahovať aj klauzulu GROUP BY. Ak v príkaze SELECT nie je klauzula GROUP BY a zoznam výberových stĺpcov obsahuje aspoň jednu agregovanú funkciu, potom nesmie obsahovať jednoduché stĺpce (okrem stĺpcov, ktoré slúžia ako argumenty agregačnej funkcie). Preto je kód v nižšie uvedenom príklade nesprávny:

USE SampleDb; SELECT Priezvisko, MIN(Id) FROM Zamestnanec;

Tu by stĺpec Priezvisko tabuľky Zamestnanec nemal byť v zozname na výber stĺpcov, pretože to nie je argument agregačnej funkcie. Na druhej strane zoznam na výber stĺpcov môže obsahovať názvy stĺpcov, ktoré nie sú argumentmi agregačnej funkcie, ak sú tieto stĺpce argumentmi klauzuly GROUP BY.

Argumentu agregovanej funkcie môže predchádzať jedno z dvoch možných kľúčových slov:

VŠETKY

Určuje, že výpočty sa vykonávajú so všetkými hodnotami v stĺpci. Toto je predvolená hodnota.

ODLIŠNÝ

Určuje, že na výpočty sa používajú iba jedinečné hodnoty stĺpcov.

Súhrnné funkcie MIN a MAX

Agregačné funkcie MIN a MAX vypočítajú najmenšiu a najväčšiu hodnotu stĺpca. Ak dotaz obsahuje klauzulu WHERE, funkcie MIN a MAX vrátia najmenšiu a najväčšiu hodnotu riadkov, ktoré zodpovedajú zadaným podmienkam. Nasledujúci príklad ukazuje použitie agregačnej funkcie MIN:

USE SampleDb; -- Vráti 2581 SELECT MIN(Id) AS "Minimálna hodnota ID" FROM Zamestnanec;

Výsledok vrátený v príklade vyššie nie je veľmi informatívny. Napríklad priezvisko zamestnanca, ktorý toto číslo vlastní, nie je známe. Toto priezvisko však nie je možné získať zvyčajným spôsobom, pretože, ako už bolo spomenuté, nie je dovolené explicitne zadať stĺpec Priezvisko. Aby sme získali aj priezvisko tohto zamestnanca spolu s najnižším osobným číslom zamestnanca, používa sa poddotaz. Nižšie uvedený príklad ukazuje použitie takéhoto poddotazu, kde poddotaz obsahuje príkaz SELECT z predchádzajúceho príkladu:

Výsledok žiadosti:

Použitie agregačnej funkcie MAX je znázornené v príklade nižšie:

Funkcie MIN a MAX môžu tiež akceptovať reťazce a dátumy ako argumenty. V prípade argumentu reťazca sa hodnoty porovnávajú pomocou skutočného poradia zoradenia. Pre všetky argumenty časových údajov typu "dátum" je najmenšia hodnota stĺpca najskorší dátum a hodnota najväčšieho stĺpca je najnovší.

Kľúčové slovo DISTINCT môžete použiť s funkciami MIN a MAX. Pred použitím agregačných funkcií MIN a MAX sa zo stĺpcov argumentov odstránia všetky hodnoty NULL.

Agregátna funkcia SUM

Agregát Funkcia SUM vypočíta celkový súčet hodnôt stĺpca. Argumentom tejto agregačnej funkcie musí byť vždy číselný dátový typ. Použitie agregačnej funkcie SUM je znázornené v príklade nižšie:

USE SampleDb; SELECT SUM (Rozpočet) "Celkový rozpočet" FROM Project;

Tento príklad počíta celkovú sumu rozpočtov pre všetky projekty. Výsledok žiadosti:

V tomto príklade agregovaná funkcia zoskupuje všetky hodnoty rozpočtu projektu a určuje ich celkovú sumu. Z tohto dôvodu dotaz obsahuje implicitnú funkciu zoskupovania (rovnako ako všetky podobné dotazy). Funkciu implicitného zoskupovania z vyššie uvedeného príkladu možno špecifikovať explicitne, ako je uvedené v príklade nižšie:

USE SampleDb; SELECT SUM (Rozpočet) "Celkový rozpočet" FROM Project GROUP BY();

Použitie parametra DISTINCT eliminuje všetky duplicitné hodnoty v stĺpci pred použitím funkcie SUM. Podobne sa pred použitím tejto agregačnej funkcie odstránia všetky hodnoty NULL.

Agregačná funkcia AVG

Agregát Funkcia AVG vráti aritmetický priemer všetkých hodnôt v stĺpci. Argumentom tejto agregačnej funkcie musí byť vždy číselný dátový typ. Pred použitím funkcie AVG sa z jej argumentu odstránia všetky hodnoty NULL.

Použitie agregačnej funkcie AVG je znázornené v príklade nižšie:

USE SampleDb; -- Vrátiť 133833 SELECT AVG (Rozpočet) "Priemerný rozpočet pre projekt" FROM Project;

Tu sa vypočíta aritmetický priemer hodnoty rozpočtu pre všetky rozpočty.

Súhrnné funkcie COUNT a COUNT_BIG

Agregát Funkcia COUNT má dve rôzne formy:

COUNT(názov stĺpca) COUNT(*)

Prvá forma funkcie počíta počet hodnôt v stĺpci col_name. Ak dotaz používa kľúčové slovo DISTINCT, pred použitím funkcie COUNT sa odstránia všetky duplicitné hodnoty v stĺpci. Táto forma funkcie COUNT neberie do úvahy hodnoty NULL pri počítaní počtu hodnôt v stĺpci.

Použitie prvého tvaru agregačnej funkcie COUNT je znázornené v príklade nižšie:

USE SampleDb; SELECT ProjectNumber, COUNT(DISTINCT Job) "Práca v projekte" FROM Works_on GROUP BY ProjectNumber;

Tu sa počíta počet rôznych pozícií pre každý projekt. Výsledok tohto dotazu:

Ako môžete vidieť z príkladu dotazu, funkcia COUNT nezohľadnila hodnoty NULL. (Súčet všetkých hodnôt v stĺpci pozície sa ukázal ako 7, nie 11, ako by mal byť.)

Druhá forma funkcie COUNT, t.j. Funkcia COUNT(*) počíta počet riadkov v tabuľke. A ak príkaz SELECT dotazu s funkciou COUNT(*) obsahuje klauzulu WHERE s podmienkou, funkcia vráti počet riadkov, ktoré spĺňajú zadanú podmienku. Na rozdiel od prvej verzie funkcie COUNT, druhý formulár neignoruje hodnoty NULL, pretože táto funkcia pracuje s riadkami, nie so stĺpcami. Nižšie uvedený príklad ukazuje použitie funkcie COUNT(*):

USE SampleDb; SELECT Job AS "Typ práce", COUNT(*) "Potrebujem pracovníkov" FROM Works_on GROUP BY Job;

Tu sa vypočítava počet pozícií vo všetkých projektoch. Výsledok žiadosti:

Funkcia COUNT_BIG podobne ako funkcia COUNT. Jediný rozdiel medzi nimi je typ výsledku, ktorý vracajú: funkcia COUNT_BIG vždy vracia hodnoty typu BIGINT, zatiaľ čo funkcia COUNT vracia dátové hodnoty typu INTEGER.

Štatistické agregované funkcie

Skupinu štatistických agregovaných funkcií tvoria tieto funkcie:

VAR

Vypočíta štatistický rozptyl všetkých hodnôt zobrazených v stĺpci alebo výraze.

VARP

Vypočíta štatistický rozptyl populácie všetkých hodnôt zobrazených v stĺpci alebo výraze.

STDEV

Vypočíta štandardnú odchýlku (ktorá sa vypočíta ako druhá odmocnina zodpovedajúceho rozptylu) všetkých hodnôt v stĺpci alebo výraze.

STDEVP

Vypočíta štandardnú odchýlku populácie všetkých hodnôt v stĺpci alebo výraze.

Používateľom definované agregačné funkcie

Databázový stroj tiež podporuje implementáciu užívateľom definovaných funkcií. Táto schopnosť umožňuje užívateľom rozšíriť systémové agregované funkcie o funkcie, ktoré môžu implementovať a nainštalovať sami. Tieto funkcie predstavujú špeciálnu triedu užívateľom definovaných funkcií a budú podrobne popísané neskôr.

MAJTE ponuku

Vo vete MAJÚCE definuje podmienku, ktorá sa vzťahuje na skupinu riadkov. Táto klauzula má teda rovnaký význam pre skupiny riadkov ako klauzula WHERE pre obsah zodpovedajúcej tabuľky. Syntax klauzuly HAVING je:

MAJÚCI STAV

Parameter podmienky tu predstavuje podmienku a obsahuje agregované funkcie alebo konštanty.

Použitie klauzuly HAVING v spojení s agregovanou funkciou COUNT(*) je znázornené v príklade nižšie:

USE SampleDb; -- Vráti "p3" SELECT ProjectNumber FROM Works_on GROUP BY ProjectNumber HAVING COUNT(*)

V tomto príklade systém zoskupí všetky riadky podľa hodnôt stĺpca ProjectNumber pomocou klauzuly GROUP BY. Potom sa spočíta počet riadkov v každej skupine a vyberú sa skupiny obsahujúce menej ako štyri riadky (tri alebo menej).

Klauzula HAVING sa dá použiť aj bez agregačných funkcií, ako je znázornené v príklade nižšie:

USE SampleDb; -- Vráti "Consultant" SELECT Job FROM Works_on GROUP BY Job HAVING Job LIKE "K%";

Tento príklad zoskupuje riadky tabuľky Works_on podľa názvu úlohy a eliminuje tie úlohy, ktoré nezačínajú písmenom "K".

Klauzula HAVING sa môže použiť aj bez klauzuly GROUP BY, aj keď to nie je bežná prax. V tomto prípade sú všetky riadky tabuľky vrátené v jednej skupine.

ORDER BY

Ponuka ZORADIŤ PODĽA určuje poradie zoradenia riadkov v sade výsledkov vrátených dotazom. Táto veta má nasledujúcu syntax:

Poradie triedenia je špecifikované v parametri col_name. Parameter col_number je alternatívny indikátor poradia triedenia, ktorý identifikuje stĺpce podľa poradia, v ktorom sa zobrazujú v zozname výberu príkazu SELECT (1 je prvý stĺpec, 2 je druhý stĺpec atď.). parameter ASC určuje triedenie vo vzostupnom poradí a parameter DESC- smerom nadol. Predvolená hodnota je ASC.

Názvy stĺpcov v klauzule ORDER BY nemusia byť v zozname vybratých stĺpcov. Ale to neplatí pre dopyty ako SELECT DISTINCT, pretože v takýchto dotazoch musia byť názvy stĺpcov uvedené v klauzule ORDER BY uvedené aj v zozname vybratých stĺpcov. Okrem toho táto klauzula nemôže obsahovať názvy stĺpcov z tabuliek, ktoré nie sú špecifikované v klauzule FROM.

Ako môžete vidieť zo syntaxe klauzuly ORDER BY, množinu výsledkov možno triediť podľa viacerých stĺpcov. Toto triedenie je znázornené na príklade nižšie:

V tomto príklade sa čísla oddelení a mená zamestnancov vyberú pre zamestnancov, ktorých osobné číslo je menšie ako 20 000, a zoradia sa podľa priezviska a mena. Výsledok tohto dotazu:

Stĺpce v klauzule ORDER BY môžu byť špecifikované nie ich názvami, ale ich poradím vo výberovom zozname. V súlade s tým môže byť veta vo vyššie uvedenom príklade prepísaná takto:

Tento alternatívny spôsob určenia stĺpcov podľa pozície namiesto názvu sa používa, ak kritérium zoradenia obsahuje agregovanú funkciu. (Ďalším spôsobom je použiť názvy stĺpcov, ktoré sa potom objavia v klauzule ORDER BY.) V klauzule ORDER BY sa však odporúča špecifikovať stĺpce ich názvami a nie číslami, aby sa uľahčila aktualizácia dotaz, či je potrebné pridať alebo odstrániť stĺpce z výberového zoznamu. Určenie stĺpcov v klauzule ORDER BY ich číslami je uvedené v príklade nižšie:

USE SampleDb; SELECT ProjectNumber, COUNT(*) "Počet zamestnancov" FROM Works_on GROUP BY ProjectNumber ORDER BY 2 DESC;

Tu sa pre každý projekt vyberie číslo projektu a počet zamestnancov, ktorí sa na ňom podieľajú, pričom sa výsledok zoradí zostupne podľa počtu zamestnancov.

Transact-SQL umiestňuje hodnoty NULL na začiatok zoznamu pri vzostupnom poradí a na koniec zoznamu pri zostupnom poradí.

Použitie klauzuly ORDER BY na stránkovanie výsledkov

Zobrazenie výsledkov dotazu na aktuálnej stránke môže byť implementované buď v užívateľskej aplikácii, alebo môžete dať pokyn databázovému serveru, aby to urobil. V prvom prípade sú všetky riadky databázy odoslané do aplikácie, ktorej úlohou je vybrať požadované riadky a zobraziť ich. V druhom prípade sa na strane servera vyberú a zobrazia iba riadky potrebné pre aktuálnu stránku. Ako by ste mohli očakávať, vytváranie stránok na strane servera zvyčajne poskytuje lepší výkon, pretože... Klientovi sa odošlú len riadky potrebné na zobrazenie.

Na podporu vytvárania stránok na strane servera SQL Server 2012 zavádza dve nové klauzuly SELECT: OFFSET a FETCH. Aplikácia týchto dvoch viet je demonštrovaná v príklade nižšie. Tu sa z databázy AdventureWorks2012 (ktorú nájdete v zdroji) získajú obchodné ID, pracovné zaradenie a dátum narodenia všetkých zamestnankýň, pričom sa výsledok zoradí vzostupne podľa pracovnej pozície. Výsledná sada riadkov sa rozdelí na 10-riadkové strany a zobrazí sa tretia strana:

Vo vete OFFSET určuje počet riadkov výsledku, ktoré sa majú v zobrazenom výsledku preskočiť. Toto číslo sa vypočíta po zoradení riadkov pomocou klauzuly ORDER BY. Vo vete NASLEDOVAŤ určuje počet riadkov, ktoré spĺňajú podmienku WHERE a sú zoradené, aby sa vrátili. Parameter tejto klauzuly môže byť konštanta, výraz alebo výsledok iného dotazu. Klauzula FETCH NEXT je podobná klauzule NAJPRV ZÍSKAJTE.

Hlavným cieľom pri vytváraní stránok na strane servera je schopnosť implementovať bežné formuláre stránok pomocou premenných. Túto úlohu je možné vykonať pomocou balíka SQL Server.

SELECT Výpis a vlastníctvo IDENTITY

vlastnosť IDENTITY umožňuje definovať hodnoty pre konkrétny stĺpec tabuľky vo forme automaticky sa zvyšujúceho počítadla. Túto vlastnosť môžu mať stĺpce s číselnými typmi údajov, ako sú TINYINT, SMALLINT, INT a BIGINT. Pre takýto stĺpec tabuľky databázový stroj automaticky vytvorí sekvenčné hodnoty začínajúce od zadanej počiatočnej hodnoty. Vlastnosť IDENTITY teda možno použiť na vytvorenie jednociferných číselných hodnôt pre vybraný stĺpec.

Tabuľka môže obsahovať iba jeden stĺpec s vlastnosťou IDENTITY. Vlastník tabuľky má možnosť zadať počiatočnú hodnotu a prírastok, ako je uvedené v príklade nižšie:

USE SampleDb; CREATE TABLE Product (Id INT IDENTITY(10000, 1) NOT NULL, Name NVARCHAR(30) NOT NULL, Price MONEY) INSERT INTO Product(Name, Price) VALUES ("Product1", 10), ("Product2", 15) , ("Produkt 3", 8), ("Produkt 4", 15), ("Produkt 5", 40); -- Vráti 10004 SELECT IDENTITYCOL FROM Product WHERE Name = "Product5"; -- Podobne ako v predchádzajúcom vyhlásení SELECT $identity FROM Product WHERE Name = "Product5";

Tento príklad najprv vytvorí tabuľku produktu, ktorá obsahuje stĺpec Id s vlastnosťou IDENTITY. Hodnoty v stĺpci Id sú vytvárané automaticky systémom, začínajúc na 10 000 a zvyšujúce sa v jednotkových prírastkoch pre každú nasledujúcu hodnotu: 10 000, 10 001, 10 002 atď.

S vlastnosťou IDENTITY je spojených niekoľko systémových funkcií a premenných. Napríklad používa príklad kódu $systémová premenná identity. Ako môžete vidieť z výstupu tohto kódu, táto premenná automaticky odkazuje na vlastnosť IDENTITY. Namiesto toho môžete použiť aj systémovú funkciu IDENTITYCOL.

Počiatočnú hodnotu a prírastok stĺpca s vlastnosťou IDENTITY možno nájsť pomocou funkcií IDENT_SEED A IDENT_INCR resp. Tieto funkcie sa používajú nasledovne:

USE SampleDb; SELECT IDENT_SEED("Produkt"), IDENT_INCR("Produkt")

Ako už bolo spomenuté, hodnoty IDENTITY nastavuje systém automaticky. Používateľ však môže explicitne špecifikovať svoje hodnoty pre určité riadky priradením parametra IDENTITY_INSERT Hodnota ON pred vložením explicitnej hodnoty:

SET IDENTITY INSERT názov tabuľky ON

Pretože parameter IDENTITY_INSERT môžete použiť na nastavenie stĺpca s vlastnosťou IDENTITY na ľubovoľnú hodnotu vrátane duplicitnej hodnoty, vlastnosť IDENTITY vo všeobecnosti nevynucuje jedinečnosť hodnôt stĺpca. Preto, aby ste vynútili jedinečnosť hodnôt stĺpcov, mali by ste použiť obmedzenia UNIQUE alebo PRIMARY KEY.

Keď vložíte hodnoty do tabuľky po nastavení IDENTITY_INSERT na on, systém vytvorí ďalšiu hodnotu stĺpca IDENTITY zvýšením najväčšej aktuálnej hodnoty tohto stĺpca.

príkaz CREATE SEQUENCE

Používanie vlastnosti IDENTITY má niekoľko významných nevýhod, z ktorých najvýznamnejšie sú tieto:

    uplatnenie vlastnosti je obmedzené na špecifikovanú tabuľku;

    novú hodnotu stĺpca nie je možné získať iným spôsobom ako jej aplikáciou;

    vlastnosť IDENTITY je možné zadať len pri vytváraní stĺpca.

Z týchto dôvodov SQL Server 2012 zavádza sekvencie, ktoré majú rovnakú sémantiku ako vlastnosť IDENTITY, ale bez vyššie uvedených nevýhod. V tomto kontexte je sekvencia databázová funkcia, ktorá vám umožňuje špecifikovať hodnoty počítadiel pre rôzne databázové objekty, ako sú stĺpce a premenné.

Sekvencie sa vytvárajú pomocou inštrukcií VYTVORIŤ SEKVENCIU. Príkaz CREATE SEQUENCE je definovaný v štandarde SQL a je podporovaný inými relačnými databázovými systémami, ako sú IBM DB2 a Oracle.

Nižšie uvedený príklad ukazuje, ako vytvoriť sekvenciu na serveri SQL Server:

USE SampleDb; CREATE SEQUENCE dbo.Sequence1 AS INT ZAČNITE S 1 PRÍRODKOM O 5 MINHODNOTA 1 MAXIMÁLNA HODNOTA 256 CYKLUS;

Vo vyššie uvedenom príklade sú hodnoty Sequence1 automaticky vytvárané systémom, začínajúc hodnotou 1 a zvyšujúcou sa 5 pre každú nasledujúcu hodnotu. Teda v Ponuka ŠTART je uvedená počiatočná hodnota a v Ponuka INCREMENT- krok. (Krok môže byť pozitívny alebo negatívny.)

V nasledujúcich dvoch nepovinných vetách MINVALUE A MAX Je určená minimálna a maximálna hodnota objektu sekvencie. (Všimnite si, že hodnota MINVALUE musí byť menšia alebo rovná počiatočnej hodnote a hodnota MAXVALUE nemôže byť väčšia ako horný limit typu údajov špecifikovaného pre sekvenciu.) V klauzule CYKLUS označuje, že sekvencia sa opakuje od začiatku, keď je prekročená maximálna (alebo minimum pre sekvenciu so záporným krokom). Štandardne je táto klauzula nastavená na NO CYCLE, čo znamená, že prekročenie maximálnej alebo minimálnej hodnoty sekvencie vyvolá výnimku.

Hlavnou črtou sekvencií je ich nezávislosť od tabuliek, t.j. môžu byť použité s akýmikoľvek databázovými objektmi, ako sú stĺpce tabuľky alebo premenné. (Táto vlastnosť má pozitívny vplyv na úložisko a tým aj výkon. Špecifickú sekvenciu nie je potrebné ukladať, uloží sa len jej posledná hodnota.)

Nové sekvenčné hodnoty sa vytvárajú pomocou ĎALŠIA HODNOTA PRE výrazy, ktorej aplikácia je znázornená v príklade nižšie:

USE SampleDb; -- Return 1 SELECT NEXT VALUE FOR dbo.sequence1; -- Vráti 6 (ďalší krok) SELECT NEXT VALUE FOR dbo.sequence1;

Na priradenie výsledku sekvencie k bunke premennej alebo stĺpca môžete použiť výraz NEXT VALUE FOR. Nižšie uvedený príklad ukazuje, ako použiť tento výraz na priradenie výsledkov k stĺpcu:

USE SampleDb; CREATE TABLE Product (Id INT NOT NULL, Name NVARCHAR(30) NOT NULL, Price MONEY) INSERT IN TO Product VALUES (NEXT VALUE FOR dbo.sequence1, "Product1", 10); INSERT INTO Product VALUES (NEXT VALUE FOR dbo.sequence1, "Product2", 15); --...

Vo vyššie uvedenom príklade najskôr vytvoríme tabuľku produktov pozostávajúcu zo štyroch stĺpcov. Ďalej dva príkazy INSERT vložia do tejto tabuľky dva riadky. Prvé dve bunky prvého stĺpca budú mať hodnoty 11 a 16.

Nižšie uvedený príklad ukazuje použitie adresárového zobrazenia sys.sekvencie ak chcete zobraziť aktuálnu hodnotu sekvencie bez jej použitia:

Príkaz NEXT VALUE FOR sa zvyčajne používa v príkaze INSERT, aby systém vložil vygenerované hodnoty. Tento výraz možno použiť aj ako súčasť viacriadkového dotazu pomocou klauzuly OVER.

Ak chcete zmeniť vlastnosť existujúcej sekvencie, použite príkaz ALTER SEQUENCE. Jedným z najdôležitejších použití tohto príkazu je možnosť RESTART WITH, ktorá resetuje zadanú sekvenciu. Nižšie uvedený príklad ukazuje použitie ALTER SEQUENCE na resetovanie takmer všetkých vlastností Sequence1:

USE SampleDb; ALTER SEQUENCE dbo.sequence1 REŠTARTOVAŤ SO 100 PRÍRODKOM O 50 MINHODNOTA 50 MAX.HODNOTA 200 ŽIADNY CYKLUS;

Odstránenie sekvencie pomocou inštrukcie DROP SEQUENCE.

Nastavte operátorov

Okrem operátorov diskutovaných vyššie podporuje Transact-SQL ďalšie tri množinové operátory: UNION, INTERSECT a EXCEPT.

operátor UNION

operátor UNION kombinuje výsledky dvoch alebo viacerých dotazov do jednej sady výsledkov, ktorá obsahuje všetky riadky patriace všetkým dotazom v zjednotení. Výsledkom spojenia dvoch tabuliek je teda nová tabuľka obsahujúca všetky riadky zahrnuté v jednej z pôvodných tabuliek alebo v oboch týchto tabuľkách.

Všeobecná forma operátora UNION vyzerá takto:

select_1 UNION select_2 ( select_3])...

Parametre select_1, select_2, ... sú príkazy SELECT, ktoré vytvárajú spojenie. Ak sa použije možnosť VŠETKY, zobrazia sa všetky riadky vrátane duplikátov. V operátori UNION má parameter ALL rovnaký význam ako vo výberovom zozname SELECT, ale s jedným rozdielom: pre výberový zoznam SELECT sa tento parameter používa štandardne, ale pre operátor UNION musí byť špecifikovaný explicitne.

Databáza SampleDb v pôvodnej podobe nie je vhodná na demonštráciu použitia operátora UNION. Preto táto sekcia vytvorí novú tabuľku EmployeeEnh, ktorá je identická s existujúcou tabuľkou Zamestnanec, ale má ďalší stĺpec Mesto. V tomto stĺpci je uvedené miesto bydliska zamestnancov.

Vytvorenie tabuľky EmployeeEnh nám poskytuje dobrú príležitosť demonštrovať použitie klauzuly DO v príkaze SELECT. Príkaz SELECT INTO vykoná dve operácie. Najprv sa vytvorí nová tabuľka so stĺpcami uvedenými v zozname SELECT. Potom sa riadky z pôvodnej tabuľky vložia do novej tabuľky. Názov novej tabuľky je špecifikovaný v klauzule INTO a názov zdrojovej tabuľky je špecifikovaný v klauzule FROM.

Nižšie uvedený príklad ukazuje, ako vytvoriť tabuľku EmployeeEnh z tabuľky Zamestnanec:

USE SampleDb; SELECT * INTO EmployeeEnh FROM Zamestnanec; ALTER TABLE EmployeeEnh ADD City NCHAR(40) NULL;

V tomto príklade príkaz SELECT INTO vytvorí tabuľku EmployeeEnh, vloží do nej všetky riadky zo zdrojovej tabuľky Zamestnanec a potom príkaz ALTER TABLE pridá stĺpec Mesto do novej tabuľky. Pridaný stĺpec Mesto však neobsahuje žiadne hodnoty. Hodnoty v tomto stĺpci je možné vložiť pomocou Management Studio alebo pomocou nasledujúceho kódu:

USE SampleDb; UPDATE EmployeeEnh SET Mesto = "Kazan" WHERE Id = 2581; UPDATE EmployeeEnh SET Mesto = "Moskva" WHERE Id = 9031; UPDATE EmployeeEnh SET Mesto = "Jekaterinburg" WHERE Id = 10102; UPDATE EmployeeEnh SET Mesto = "St. Petersburg" WHERE Id = 18316; UPDATE EmployeeEnh SET Mesto = "Krasnodar" WHERE Id = 25348; UPDATE EmployeeEnh SET Mesto = "Kazan" WHERE Id = 28559; UPDATE EmployeeEnh SET Mesto = "Perm" WHERE Id = 29346;

Teraz sme pripravení demonštrovať použitie inštrukcie UNION. Nižšie uvedený príklad ukazuje dotaz na vytvorenie spojenia medzi tabuľkami EmployeeEnh a Department pomocou tohto príkazu:

USE SampleDb; SELECT City AS "Mesto" FROM EmployeeEnh UNION SELECT Location FROM Department;

Výsledok tohto dotazu:

Pomocou príkazu UNION možno spájať iba kompatibilné tabuľky. Kompatibilnými tabuľkami rozumieme, že oba zoznamy vybraných stĺpcov musia obsahovať rovnaký počet stĺpcov a zodpovedajúce stĺpce musia mať kompatibilné dátové typy. (Pokiaľ ide o kompatibilitu, typy údajov INT a SMALLINT nie sú kompatibilné.)

Výsledok spojenia je možné zoradiť iba pomocou klauzuly ORDER BY v poslednom príkaze SELECT, ako je znázornené v príklade nižšie. Klauzuly GROUP BY a HAVING možno použiť s jednotlivými príkazmi SELECT, ale nie v rámci samotného spojenia.

Dotaz v tomto príklade vyberá zamestnancov, ktorí buď pracujú v oddelení d1, alebo začali pracovať na projekte pred 1. januárom 2008.

Operátor UNION podporuje parameter ALL. Použitie tejto možnosti neodstráni duplikáty zo sady výsledkov. Operátor OR môžete použiť namiesto operátora UNION, ak všetky príkazy SELECT spojené jedným alebo viacerými operátormi UNION odkazujú na rovnakú tabuľku. V tomto prípade je množina príkazov SELECT nahradená jedným príkazom SELECT so množinou operátorov OR.

Operátory INTERSECT a EXCEPT

Dvaja ďalší operátori na prácu so súpravami, INTERSECT A OKREM, určiť priesečník a rozdiel, resp. Pod priesečníkom sa v tomto kontexte nachádza množina riadkov, ktoré patria do oboch tabuliek. A rozdiel medzi dvoma tabuľkami je definovaný ako všetky hodnoty, ktoré patria do prvej tabuľky a nie sú prítomné v druhej. Nasledujúci príklad ukazuje použitie operátora INTERSECT:

Transact-SQL nepodporuje použitie parametra ALL s operátorom INTERSECT ani EXCEPT. Použitie operátora EXCEPT je znázornené v príklade nižšie:

Pamätajte, že tieto tri množinové operátory majú rôzne priority vykonávania: operátor INTERSECT má najvyššiu prioritu, za ním nasleduje operátor EXCEPT a operátor UNION má najnižšiu prioritu. Nevenovanie pozornosti priorite vykonávania pri použití viacerých operátorov rôznych množín môže viesť k neočakávaným výsledkom.

CASE výrazy

Pri programovaní databázových aplikácií je niekedy potrebné upraviť reprezentáciu údajov. Napríklad ľudí možno rozdeliť kódovaním podľa ich sociálnej triedy pomocou hodnôt 1, 2 a 3, ktoré označujú mužov, ženy a deti. Táto programovacia technika môže skrátiť čas potrebný na implementáciu programu. výraz CASE Jazyk Transact-SQL uľahčuje implementáciu tohto typu kódovania.

Na rozdiel od väčšiny programovacích jazykov CASE nie je výrok, ale výraz. Preto možno výraz CASE použiť takmer kdekoľvek, kde Transact-SQL umožňuje výrazy. Výraz CASE má dve formy:

    jednoduchý výraz CASE;

    hľadaný výraz CASE.

Syntax jednoduchého výrazu CASE je:

Príkaz s jednoduchým výrazom CASE najskôr vyhľadá zoznam všetkých výrazov v klauzula WHEN prvý výraz, ktorý sa zhoduje s výrazom_1, potom vykoná zodpovedajúci POTOM doložka. Ak sa v zozname WHEN nenachádza žiadny zodpovedajúci výraz, klauzula ELSE.

Syntax vyhľadávacieho výrazu CASE je nasledovná:

Toto vyhľadá prvú podmienku zhody a potom vykoná zodpovedajúcu klauzulu THEN. Ak žiadna z podmienok nespĺňa požiadavky, vykoná sa doložka ELSE. Použitie vyhľadávacieho výrazu CASE je znázornené v príklade nižšie:

USE SampleDb; SELECT ProjectName, CASE WHEN Budget > 0 AND Budget 100000 AND Budget 150000 AND Budget

Výsledok tohto dotazu:

Tento príklad váži rozpočty všetkých projektov a potom zobrazuje ich vypočítané váhy spolu s príslušnými názvami projektov.

Príklad nižšie ukazuje ďalší spôsob použitia výrazu CASE, kde klauzula WHEN obsahuje poddotazy, ktoré tvoria súčasť výrazu:

USE SampleDb; SELECT ProjectName, CASE WHEN p1.Budget (SELECT AVG(p2.Budget) FROM Project p2) THEN "nadpriemerný" END "Kategória rozpočtu" FROM Project p1;

Výsledok tohto dotazu je nasledovný:

Na zhrnutie informácií obsiahnutých v databáze poskytuje SQL súhrnné funkcie. Agregačná funkcia berie ako argument celý stĺpec údajov a vracia jedinú hodnotu, ktorá sumarizuje daný stĺpec špecifickým spôsobom.

Napríklad agregačná funkcia AVG() berie stĺpec čísel ako argument a vypočíta ich priemer.

Na výpočet priemerného príjmu na hlavu obyvateľa Zelenogradu potrebujete nasledujúci dotaz:

VYBERTE „PREMERNÝ PRÍJEM NA OBYVATEĽA=“, AVG (SUMD)

SQL má šesť agregovaných funkcií, ktoré poskytujú rôzne typy súhrnných informácií (obrázok 1):

– SUM() vypočíta súčet všetkých hodnôt obsiahnutých v stĺpci;

– AVG() vypočíta priemer hodnôt obsiahnutých v stĺpci;

– MIN() nájde najmenšiu zo všetkých hodnôt obsiahnutých v stĺpci;

– MAX() nájde najväčšiu zo všetkých hodnôt obsiahnutých v stĺpci;

– COUNT() počíta počet hodnôt obsiahnutých v stĺpci;

– COUNT(*) počíta počet riadkov v tabuľke výsledkov dotazu.

Argumentom agregačnej funkcie môže byť jednoduchý názov stĺpca, ako v predchádzajúcom príklade, alebo výraz, ako v nasledujúcom dotaze, ktorý špecifikuje výpočet priemernej dane na obyvateľa:

VYBERTE AVG (SUMD*0,13)

Tento dotaz vytvorí dočasný stĺpec obsahujúci hodnoty (SUMD*0,13) pre každý riadok tabuľky PERSON a potom vypočíta priemer dočasného stĺpca.

Výšku príjmu pre všetkých obyvateľov Zelenogradu je možné vypočítať pomocou súhrnnej funkcie SUM:

VYBERTE SÚČET (SUMD) OD OSOBY

Na výpočet súčtu z tabuľky výsledkov získanej spojením niekoľkých zdrojových tabuliek možno použiť aj agregovanú funkciu. Môžete napríklad vypočítať celkovú výšku príjmu, ktorý obyvatelia dostali zo zdroja nazývaného „štipendium“:

VYBERTE SUM (PENIAZE)

ZO ZISKU, HAVE_D

WHERE PROFIT.ID=HAVE_D.ID

AND PROFIT.SOURCE=’Štipendium’

Agregačné funkcie MIN() a MAX() vám umožňujú nájsť najmenšie a najväčšie hodnoty v tabuľke. Stĺpec môže obsahovať číselné alebo reťazcové hodnoty alebo hodnoty dátumu alebo času.

Môžete napríklad definovať:

a) najnižší celkový príjem rezidentov a najvyššia splatná daň:

SELECT MIN (SUMD), MAX (SUMD*0,13)

b) dátumy narodenia najstaršieho a najmladšieho obyvateľa:

SELECT MIN (RDATE), MAX (RDATE)

c) priezviská, mená a priezviská úplne prvých a posledných obyvateľov v zozname, zoradené abecedne:

VYBERTE MIN (FIO), MAX (FIO)

Pri používaní týchto agregačných funkcií musíte pamätať na to, že číselné údaje sa porovnávajú pomocou aritmetických pravidiel, dátumy sa porovnávajú postupne (hodnoty skorších dátumov sa považujú za menšie ako neskoršie) a časové intervaly sa porovnávajú na základe ich trvania.

Pri použití funkcií MIN() a MAX() s údajmi reťazca závisí výsledok porovnávania dvoch reťazcov od použitej tabuľky kódovania znakov.

Agregačná funkcia COUNT() počíta počet hodnôt v stĺpci ľubovoľného typu:

a) koľko bytov je v 1. mikroobvode?

VYBERTE POČET (ADR) Z PLOCHÉHO, KDE ADR AKO "%, 1_ _-%"

b) koľko obyvateľov má zdroje príjmu?

SELECT COUNT (DISTINCT NOM) OD HAVE_D

c) koľko zdrojov príjmu využívajú rezidenti?

SELECT COUNT(DISTINCT ID) FROM HAVE_D (Kľúčové slovo DISTINCT určuje, že sa počítajú neduplikované hodnoty v stĺpci).

Špeciálna agregačná funkcia COUNT(*) počíta riadky v tabuľke výsledkov, nie hodnoty údajov:

a) koľko bytov je v 2. mikroobvode?

VYBERTE POČET (*) Z PLOCHÉHO KDE ADR AKO "%, 2__-%"

b) koľko zdrojov príjmov má Ivan Ivanovič Ivanov?

VYBERTE POČET (*) OD OSOBY, HAVE_D WHERE FIO="Ivanov Ivan Ivanovič" A PERSON.NOM=HAVE_D.NOM

c) koľko obyvateľov býva v byte na určitej adrese?

VYBERTE POČET (*) OD OSOBY WHERE ADR="Zelenograd, 1001-45"

Jedným zo spôsobov, ako pochopiť, ako sa vykonávajú súhrnné dotazy s agregačnými funkciami, je myslieť si, že vykonávanie dotazu je rozdelené na dve časti. Najprv určíme, ako by dotaz fungoval bez agregačných funkcií, ktoré by vracali viacero riadkov výsledkov. Agregačné funkcie sa potom aplikujú na výsledky dotazu a vrátia jeden výsledný riadok.

Zvážte napríklad nasledujúci zložitý dotaz: nájdite priemerný celkový príjem na obyvateľa, súčet celkových príjmov obyvateľov a priemerný výnos zdroja ako percento z celkového príjmu rezidenta. Operátor dáva odpoveď

SELECT AVG(SUMD), SUM(SUMD), (100*AVG(MONEY/SUMD)) OD OSOBY, PROFIT, HAVE_D WHERE PERSON.NOM=MAVE_D.NOM A HAVE_D.ID=PROFIT.ID

Bez agregačných funkcií by dotaz vyzeral takto:

VYBERTE SÚČET, SÚČET, PENIAZE/SÚČET OD OSOBY, ZISK, HAVE_D WHERE PERSON.NOM=MAJ_D.NOM A HAVE_D.ID=PROFIT.ID

a vráti jeden riadok výsledkov pre každého rezidenta a konkrétny zdroj príjmu. Agregačné funkcie používajú stĺpce tabuľky výsledkov dotazu na vytvorenie jednoriadkovej tabuľky so súhrnnými výsledkami.

Vo vrátenom riadku stĺpca môžete zadať agregovanú funkciu namiesto ľubovoľného názvu stĺpca. Môže byť napríklad súčasťou výrazu, ktorý pridáva alebo odčítava hodnoty dvoch agregovaných funkcií:

VYBERTE MAX (SUMD)-MIN (SUMD) OD OSOBY

Agregačná funkcia však nemôže byť argumentom inej agregačnej funkcie, t.j. Vnorené agregované funkcie sú zakázané.

Zoznam vrátených stĺpcov tiež nemôže súčasne používať agregačné funkcie a bežné názvy stĺpcov, pretože to nedáva zmysel, napríklad:

VYBERTE FIO, SÚČET (SUMD) OD OSOBY

Tu prvý prvok zoznamu dáva pokyn DBMS, aby vytvoril tabuľku, ktorá bude pozostávať z niekoľkých riadkov a bude obsahovať jeden riadok pre každého rezidenta. Druhý prvok zoznamu žiada DBMS, aby získal jednu výslednú hodnotu, ktorá je súčtom hodnôt v stĺpci SUMD. Tieto dva pokyny si navzájom odporujú, čo vedie k chybe.

Uvedené neplatí pre prípady spracovania poddotazov a dopytov so zoskupovaním.

klauzula GROUP BY(príkazy SELECT) vám umožňuje zoskupiť údaje (riadky) podľa hodnoty stĺpca alebo niekoľkých stĺpcov alebo výrazov. Výsledkom bude súbor súhrnných riadkov.

Každý stĺpec vo výberovom zozname sa musí nachádzať v klauzule GROUP BY, pričom jedinou výnimkou sú konštanty a stĺpce, ktoré sú operandmi agregačných funkcií.

Tabuľku môžete zoskupiť podľa ľubovoľnej kombinácie jej stĺpcov.

Súhrnné funkcie sa používajú na získanie jednej celkovej hodnoty zo skupiny riadkov. Všetky agregačné funkcie vykonávajú výpočty s jedným argumentom, ktorým môže byť stĺpec alebo výraz. Výsledkom každého výpočtu agregovanej funkcie je konštantná hodnota zobrazená v samostatnom stĺpci výsledkov.

Agregačné funkcie sú špecifikované v zozname stĺpcov príkazu SELECT, ktorý môže obsahovať aj klauzulu GROUP BY. Ak v príkaze SELECT nie je klauzula GROUP BY a zoznam výberových stĺpcov obsahuje aspoň jednu súhrnnú funkciu, potom nesmie obsahovať jednoduché stĺpce. Na druhej strane zoznam na výber stĺpcov môže obsahovať názvy stĺpcov, ktoré nie sú argumentmi agregačnej funkcie, ak sú tieto stĺpce argumentmi klauzuly GROUP BY.

Ak dotaz obsahuje klauzulu WHERE, potom agregačné funkcie vypočítajú hodnotu pre výsledky výberu.

Súhrnné funkcie MIN a MAX vypočítajte najmenšiu a najväčšiu hodnotu stĺpca, resp. Argumenty môžu byť čísla, reťazce a dátumy. Všetky hodnoty NULL sa pred výpočtom odstránia (to znamená, že sa neberú do úvahy).

Agregátna funkcia SUM vypočíta celkový súčet hodnôt stĺpca. Argumenty môžu byť iba čísla. Použitie parametra DISTINCT eliminuje všetky duplicitné hodnoty v stĺpci pred použitím funkcie SUM. Podobne sa pred použitím tejto agregačnej funkcie odstránia všetky hodnoty NULL.

Agregačná funkcia AVG vráti priemer všetkých hodnôt v stĺpci. Argumenty môžu byť tiež iba čísla a všetky hodnoty NULL sa pred vyhodnotením odstránia.

Súhrnná funkcia COUNT má dve rôzne formy:

  • COUNT(col_name) - spočíta počet hodnôt v stĺpci col_name, hodnoty NULL sa neberú do úvahy
  • COUNT(*) - počíta počet riadkov v tabuľke, do úvahy sa berú aj hodnoty NULL

Ak dotaz používa kľúčové slovo DISTINCT, pred použitím funkcie COUNT sa odstránia všetky duplicitné hodnoty v stĺpci.

Funkcia COUNT_BIG podobne ako funkcia COUNT. Jediný rozdiel medzi nimi je typ výsledku, ktorý vracajú: funkcia COUNT_BIG vždy vracia hodnoty typu BIGINT, zatiaľ čo funkcia COUNT vracia dátové hodnoty typu INTEGER.

IN MAJTE ponuku definuje podmienku, ktorá sa vzťahuje na skupinu riadkov. Pre skupiny riadkov má rovnaký význam ako klauzula WHERE pre obsah príslušnej tabuľky (WHERE platí pred zoskupením, HAVING po).

Dokáže vykonávať zovšeobecnené skupinové spracovanie hodnôt poľa. To sa vykonáva pomocou agregačných funkcií. Súhrnné funkcie vytvárajú jednu hodnotu pre celú skupinu tabuliek. SQL poskytuje nasledujúce agregačné funkcie:

  • COUNT– spočíta počet riadkov tabuľky s nenulovými hodnotami poľa zadaného ako argument.
  • SUM– vypočíta aritmetický súčet všetkých vybraných hodnôt pre dané pole.
  • AVG– spriemeruje všetky vybrané hodnoty tohto poľa.
  • MAX– zobrazí najväčšiu hodnotu zo všetkých vybratých hodnôt pre toto pole.
  • MIN– zobrazí najmenšiu hodnotu zo všetkých vybratých hodnôt pre toto pole.

    Používanie agregačných funkcií

    Agregačné funkcie sa používajú podobne ako názvy polí v klauzule SELECT dotazu, s jednou výnimkou: berú názvy polí ako argument. Je možné použiť iba číselné polia SUM A AVG. S COUNT, MAX, A MIN Je možné použiť číselné aj znakové polia. Pri použití so znakovými poľami MAX A MIN preloží ich do ASCII ekvivalentu. Znamená to, že MIN vyberie prvý a MAX posledná hodnota v abecednom poradí.

    Ak chcete zistiť celkovú sumu predaja v tabuľke predaja, musíme napísať nasledujúci dotaz:

    SELECT SUM(SSum) FROM Predáva

    V dôsledku toho dostaneme:

    Tento dotaz spočítal počet neprázdnych hodnôt v poli SNum tabuľky Sells. Ak prepíšeme dotaz takto:

    SELECT COUNT(SDdate) FROM Predáva

    V dôsledku toho dostaneme:

    COUNT OF SDdate
    4

    Rôzne výsledky dotazu pri výpočte toho, čo sa zdá byť to isté, sa získajú, pretože jedna z hodnôt poľa SDate je prázdna ( NULOVÝ). Pri používaní takýchto dotazov buďte opatrní.