Agregační funkce provádí výpočty na skupině. Agregační funkce v jazyce SQL. Souhrnné funkce COUNT a COUNT_BIG

Násobení a dělení zlomků.

Pozor!
Existují další
materiály ve zvláštní sekci 555.
Pro ty, kteří jsou velmi "ne moc..."
A pro ty, kteří „moc…“)

Tato operace je mnohem hezčí než sčítání-odčítání! Protože je to jednodušší. Pro připomenutí, pro vynásobení zlomku zlomkem je třeba vynásobit čitatele (toto bude čitatel výsledku) a jmenovatele (toto bude jmenovatel). to je:

Například:

Vše je extrémně jednoduché. A prosím nehledejte společného jmenovatele! Tady o něj není nouze...

Chcete-li vydělit zlomek zlomkem, musíte obrátit druhý(to je důležité!) zlomek a vynásobte je, tj.:

Například:

Pokud narazíte na násobení nebo dělení celými čísly a zlomky, je to v pořádku. Stejně jako u sčítání uděláme zlomek z celého čísla s jedničkou ve jmenovateli – a do toho! Například:

Na střední škole se často musíte vypořádat s třípatrovými (nebo dokonce čtyřpatrovými!) zlomky. Například:

Jak mohu, aby tento zlomek vypadal slušně? Ano, velmi jednoduché! Použijte dvoubodové dělení:

Ale nezapomeňte na pořadí dělení! Na rozdíl od násobení je to zde velmi důležité! Samozřejmě si nebudeme plést 4:2 nebo 2:4. Ale ve třípatrovém zlomku je snadné udělat chybu. Všimněte si například:

V prvním případě (výraz vlevo):

Ve druhém (výraz vpravo):

Cítíte ten rozdíl? 4 a 1/9!

Co určuje pořadí dělení? Buď se závorkami, nebo (jako zde) s délkou vodorovných čar. Rozvíjejte své oko. A pokud nejsou žádné závorky nebo pomlčky, jako:

pak dělit a násobit v pořadí, zleva doprava!

A také velmi jednoduché a důležitá technika. V akcích s tituly se vám bude tak hodit! Vydělme jedničku libovolným zlomkem, například 13/15:

Střela se obrátila! A to se děje vždy. Při dělení 1 libovolným zlomkem je výsledkem stejný zlomek, jen obráceně.

To je vše pro operace se zlomky. Věc je docela jednoduchá, ale chyb dává víc než dost. Vezměte prosím na vědomí praktické rady, a bude jich méně (chyb)!

Praktické tipy:

1. Nejdůležitější při práci se zlomkovými výrazy je přesnost a všímavost! To není běžná slova, nic dobrého! To je naprostá nutnost! Proveďte všechny výpočty na Unified State Exam jako plnohodnotný úkol, soustředěný a jasný. Je lepší napsat do konceptu dva řádky navíc, než se pokazit při provádění mentálních výpočtů.

2. V příkladech s různé typy zlomky - přejděte na obyčejné zlomky.

3. Všechny zlomky redukujeme, dokud se nezastaví.

4. Víceúrovňové zlomkové výrazy redukujeme na obyčejné pomocí dělení přes dva body (dodržujeme pořadí dělení!).

5. Vydělte jednotku zlomkem v hlavě, jednoduše zlomek otočte.

Zde jsou úkoly, které rozhodně musíte splnit. Odpovědi jsou uvedeny po všech úkolech. Využijte materiály k tomuto tématu a praktické tipy. Odhadněte, kolik příkladů jste dokázali správně vyřešit. Hned napoprvé! Bez kalkulačky! A vyvodit správné závěry...

Pamatujte - správná odpověď je přijaté od druhého (zejména potřetí) se nepočítá! Takový je drsný život.

Tak, řešit ve zkušebním režimu ! To už je mimochodem příprava na jednotnou státní zkoušku. Příklad vyřešíme, zkontrolujeme, vyřešíme další. Všechno jsme rozhodli - znovu zkontrolovali od prvního do posledního. A pouze Pak podívejte se na odpovědi.

Vypočítat:

už jste se rozhodli?

Hledáme odpovědi, které odpovídají vašim. Schválně jsem je zapsal neuspořádaně, mimo pokušení, abych tak řekl... Tady jsou odpovědi, psané středníky.

0; 17/22; 3/4; 2/5; 1; 25.

Nyní vyvodíme závěry. Pokud vše klaplo, mám z vás radost! Základní výpočty se zlomky nejsou váš problém! Můžete dělat vážnější věci. Pokud ne...

Takže máte jeden ze dvou problémů. Nebo obojí najednou.) Nedostatek znalostí a (nebo) nepozornost. Ale... Tohle řešitelný problémy.

Pokud se vám tato stránka líbí...

Mimochodem, mám pro vás několik dalších zajímavých stránek.)

Můžete si procvičit řešení příkladů a zjistit svou úroveň. Testování s okamžitým ověřením. Pojďme se učit - se zájmem!)

Můžete se seznámit s funkcemi a derivacemi.



  • Agregační funkce se používají podobně jako názvy polí v příkazu SELECT, s jednou výjimkou: berou název pole jako argument. S funkcemi SOUČET A AVG Lze použít pouze číselná pole. S funkcemi COUNT, MAX a MIN Lze použít jak číselná, tak znaková pole. Při použití s ​​poli znaků MAX A MIN přeloží je do ekvivalentu kódu ASCII a zpracuje je abecední pořadí. Některé DBMS umožňují použití vnořených agregátů, ale to je odchylka od standardu ANSI se všemi z toho vyplývajícími důsledky.


Můžete například vypočítat počet studentů, kteří složili zkoušky v jednotlivých oborech. Chcete-li to provést, musíte spustit dotaz seskupený podle pole „Disciplína“ a jako výsledek zobrazit název disciplíny a počet řádků ve skupině pro tuto disciplínu. Použití znaku * jako argumentu funkce COUNT znamená sčítání všech řádků ve skupině.

VYBERTE R1. Disciplína, COUNT(*)

GROUP BY R1.Disciplína;

Výsledek:


SELECT R1.Discipline, COUNT (*)

KDE R1. Hodnocení NENÍ NULL

GROUP BY R1.Disciplína;

Výsledek:


nebudou zahrnuty do množiny n-tic před seskupením, takže počet n-tic ve skupině pro disciplínu „Teorie informací“ bude o 1 menší.

Podobný výsledek lze získat, pokud dotaz napíšete následujícím způsobem:

VYBERTE R1. Disciplína, POČET (R1. Hodnocení)

GROUP BY R1. Disciplína;

Funkce POČET (NÁZEV ATRIBUTU) počítá počet konkrétních hodnot ve skupině, na rozdíl od funkce POČÍTAT(*), který počítá počet řádků ve skupině. Ve skupině s disciplínou „Teorie informací“ budou skutečně 4 řádky, ale pouze 3 určité hodnoty atribut "Hodnocení".


Pravidla pro zpracování hodnot NULL v agregačních funkcích

Pokud jsou některé hodnoty ve sloupci stejné NULL Při výpočtu výsledku funkce jsou vyloučeny.

Pokud jsou všechny hodnoty ve sloupci stejné NULL, To Max Min. Součet Prům = NULL počet = 0 (nula).

Pokud je stůl prázdný, počet(*) = 0 .

Můžete také použít agregační funkce bez operace předběžného seskupení, v takovém případě je celý vztah považován za jednu skupinu a pro tuto skupinu lze vypočítat jednu hodnotu na skupinu.

Pravidla pro interpretaci agregačních funkcí

Agregační funkce lze zahrnout do seznamu výstupů a poté je aplikovat na celou tabulku.

VYBERTE MAX (Vyhodnocení) z R1maximální skóre na zasedání;

VYBERTE SOUČET (Skóre) z R1 uvede součet všech známek za relaci;

VYBERTE AVG (hodnocení) z R1 poskytne průměrné skóre za celou relaci.


2; Výsledek: " width="640"

Když se znovu vrátíme do databáze „Session“ (tabulka R1), zjistíme počet úspěšně složených zkoušek:

SELECT COUNT(*) As Doručeno _ zkoušky

KDE skóre 2;

Výsledek:


Argumenty pro agregační funkce mohou být jednotlivé sloupce tabulky. Chcete-li například vypočítat počet odlišných hodnot určitého sloupce ve skupině, musíte spolu s názvem sloupce použít klíčové slovo DISTINCT. Spočítejme si počet různých známek získaných v každé disciplíně:

VYBERTE R1.Disciplína, POČET (ODLIŠNÁ R1.Hodnocení)

KDE R1. Hodnocení NENÍ NULL

GROUP BY R1.Disciplína;

Výsledek:


Stejného výsledku dosáhneme, pokud vyloučíme explicitní podmínku v části WHERE, v takovém případě bude dotaz vypadat takto:

VYBERTE R1. Disciplína, POČET (DISTINCT R1. Hodnocení)

GROUP BY R1. Disciplína;

Funkce POČET (ODLIŠNÉ R1.Hodnocení) počítá jen jisté různé významy.

Aby bylo možné v tomto případě získat požadovaný výsledek, musí být provedeno předkonverze datový typ sloupce „Skóre“ převedením na reálný typ, pak výsledkem výpočtu průměru nebude celé číslo. V tomto případě bude žádost vypadat takto:


2 Seskupit podle R2. Skupina, R1. Disciplína; Zde funkce CAST() převede sloupec Score na platný datový typ. "width="640"

Vyberte R2.Group, R1.Discipline,Count(*) jako Total, AVG(cast(Score as decimal(3,1))) jako Average_score

Od R1,R2

kde R1. Celé jméno = R2. Celé jméno a R1. skóre není nulové

a R1. skóre 2

Seskupit podle R2. Skupina, R1. Disciplína;

Tady je funkce OBSAZENÍ() Převede sloupec Hodnocení na platný datový typ.


V klauzuli WHERE nelze použít agregační funkce, protože podmínky v této části se vyhodnocují z hlediska jednoho řádku a agregační funkce se vyhodnocují z hlediska skupin řádků.

Klauzule GROUP BY vám umožňuje definovat podmnožinu hodnot v konkrétním poli z hlediska jiného pole a aplikovat na podmnožinu agregační funkci. To umožňuje kombinovat pole a agregační funkce do jednoho klauzule SELECT. Agregační funkce lze použít jak ve výrazu pro výstup výsledků řádku SELECT, tak ve výrazu pro podmínku zpracování vytvořených skupin HAVING. V tomto případě se každá agregační funkce vypočítá pro každou vybranou skupinu. Hodnoty získané z výpočtu agregačních funkcí lze použít k zobrazení odpovídajících výsledků nebo k podmínění výběru skupin.

Pojďme vytvořit dotaz, který zobrazí skupiny, ve kterých bylo v jedné disciplíně ve zkouškách obdrženo více než jedna špatná známka:


1; Výsledek: " width="640"

VYBERTE R2. Skupina

OD R1,R2

KDE R1. Celé jméno = R2. Celé jméno AND

R1. Skóre = 2

SKUPINA PODLE R2.Skupina, R1.Disciplína

HAVING count(*) 1;

Výsledek:


Máme databázi „Banka“ složenou z jedné tabulky F, která uchovává relaci F obsahující informace o účtech v pobočkách určité banky:

Zjistěte celkový zůstatek na účtech v pobočkách. Pro každou z nich můžete vytvořit samostatný dotaz výběrem SUM (Zůstatek) z tabulky pro každou větev, ale operace seskupení GROUP BY vám umožní dát je všechny do jednoho příkazu:

VYBRAT Větev , SUM( Zbytek )

GROUP BY Branch;

GROUP BY aplikuje agregační funkce nezávisle na každou skupinu identifikovanou hodnotou pole Pobočka. Skupina se skládá z řádků s stejnou hodnotu Pole Větev a funkce SOUČET se uplatňuje samostatně pro každou takovou skupinu, tj. celkový zůstatek účtu se počítá samostatně pro každou pobočku. Hodnota pole, na které se vztahuje GROUP BY, podle definice má pouze jednu hodnotu na výstupní skupinu, stejně jako výsledek agregační funkce.


5 000; Argumenty v klauzuli HAVING se řídí stejnými pravidly jako v klauzuli SELECT, která používá GROUP BY . Musí mít jednu hodnotu na výstupní skupinu. "width="640"

Předpokládejme, že vybereme pouze ty pobočky, jejichž celkové zůstatky na účtech přesahují 5 000 USD, a také celkové zůstatky za vybrané pobočky. Chcete-li zobrazit výsledky pro pobočky s celkovými zůstatky nad 5 000 USD, musíte použít klauzuli HAVING. Klauzule HAVING určuje kritéria použitá k odstranění určitých skupin z výstupu, stejně jako klauzule WHERE pro jednotlivé řádky.

Správný příkaz by byl:

SELECT větev, SUM(zbývající)

GROUP BY Větev

MÁTE SOUČET ( Zbytek ) 5 000;

Argumenty ve větě MÍT dodržovat stejná pravidla jako ve větě VYBRAT kde se používá GROUP BY. Musí mít jednu hodnotu na výstupní skupinu.


Další příkaz bude zakázáno:

SELECT Branch,SUM(Zbývající)

SKUPINA PODLE pobočky

HAVING Datum otevření = 27.12.2004 ;

Pole Datum otevření nelze použít ve větě MÍT, protože může mít více než jednu hodnotu na výstupní skupinu. Aby se předešlo takové situaci, návrh MÍT by měl odkazovat pouze na vybrané agregáty a pole GROUP BY. K dispozici správnou cestou podejte výše uvedený požadavek:

SELECT Branch,SUM(Zbývající)

WHEREOpenDate = '27/12/2004'

GROUP BY Branch;


Význam této žádosti dále: najděte součet zůstatků pro každou pobočku účtů otevřených 27. prosince 2004.

Jak bylo uvedeno dříve, HAVING může převzít pouze argumenty, které mají jednu hodnotu na výstupní skupinu. Prakticky nejběžnější jsou odkazy na agregační funkce, ale také vybraná pole pomocí GROUP BY jsou také přijatelné. Chceme například vidět celkové zůstatky na účtech poboček v Petrohradu, Pskově a Urjupinsku:

SELECT větev, SUM(zbývající)

OD F,Q

KDE F. Pobočka = Q. Pobočka

SKUPINA PODLE pobočky

MAJÍCÍ pobočku (‚Petrohrad‘, ‚Pskov‘, ‚Urjupinsk‘);

100 000; Pokud je celkový zůstatek větší než 100 000 $, pak to uvidíme ve výsledném vztahu, jinak dostaneme prázdný vztah. "width="640"

V predikátových aritmetických výrazech obsažených v klauzuli výběru klauzule HAVING lze tedy přímo použít pouze specifikace sloupců určených jako seskupovací sloupce v klauzuli GROUP BY. Zbývající sloupce lze zadat pouze v rámci specifikací agregačních funkcí COUNT, SUM, AVG, MIN a MAX, které počítají v v tomto případě nějakou agregovanou hodnotu pro celou skupinu řádků. Výsledkem provedení klauzule HAVING je seskupená tabulka obsahující pouze ty skupiny řádků, pro které je výsledek výpočtu podmínky výběru v klauzuli HAVING TRUE. Zejména pokud je klauzule HAVING přítomna v dotazu, který neobsahuje GROUP BY, bude výsledkem jejího provedení buď prázdný stůl, nebo výsledek provádění předchozích sekcí tabulkového výrazu, které jsou považovány za jednu skupinu bez seskupování sloupců. Podívejme se na příklad. Řekněme, že chceme zobrazit celkovou částku zůstatků napříč všemi pobočkami, ale pouze pokud je vyšší než 100 000 $ V tomto případě náš dotaz nebude obsahovat seskupovací operace, ale bude obsahovat sekci HAVING a bude vypadat takto:

VYBERTE SOUČET( Zbytek )

HAVING SUM( Zbytek ) 100 000;

Pokud je celkový zůstatek větší než 100 000 $, pak to uvidíme ve výsledném vztahu, jinak dostaneme prázdný vztah.


klauzule GROUP BY (příkazy SELECT) umožňuje seskupit data (řádky) podle hodnoty sloupce nebo několika sloupců nebo výrazů. Výsledkem bude sada souhrnných řádků.

Každý sloupec ve výběrovém seznamu se musí objevit v klauzuli GROUP BY, s výjimkou konstant a sloupců operandu agregované funkce.

Tabulku můžete seskupit podle libovolné kombinace jejích sloupců.

Agregační funkce se používají k získání jedné celkové hodnoty ze skupiny řádků. Všechny agregační funkce provádějí výpočty s jedním argumentem, kterým může být sloupec nebo výraz. Výsledkem jakéhokoli výpočtu agregační funkce je konstantní hodnota zobrazená v samostatném sloupci výsledků.

Agregační funkce jsou specifikovány v seznamu sloupců příkazu SELECT, který může také obsahovat klauzuli GROUP BY. Pokud v příkazu SELECT není žádná klauzule GROUP BY a seznam vybraných sloupců obsahuje alespoň jednu agregační funkci, pak nesmí obsahovat jednoduché sloupce. Na druhé straně může seznam pro výběr sloupců obsahovat názvy sloupců, které nejsou argumenty agregační funkce, pokud jsou tyto sloupce argumenty klauzule GROUP BY.

Pokud dotaz obsahuje klauzuli WHERE, pak agregační funkce vypočítají hodnotu pro výsledky výběru.

Agregační funkce MIN a MAX vypočítat nejmenší a největší hodnotu sloupce, resp. Argumenty mohou být čísla, řetězce a data. Všechny hodnoty NULL jsou před výpočtem odstraněny (to znamená, že se neberou v úvahu).

Agregační funkce SUM vypočítá celkový součet hodnot sloupce. Argumenty mohou být pouze čísla. Použití parametru DISTINCT eliminuje všechny duplicitní hodnoty ve sloupci před použitím Funkce SUM. Podobně jsou před použitím této agregační funkce odstraněny všechny hodnoty NULL.

Agregační funkce AVG vrátí průměr všech hodnot ve sloupci. Argumenty mohou být také pouze čísla a všechny hodnoty NULL jsou před vyhodnocením odstraněny.

Agregační funkce COUNT má dvě různé podoby:

  • COUNT(název_sloupce) - počítá počet hodnot ve sloupci název_sloupce, hodnoty NULL se neberou v úvahu
  • COUNT(*) - počítá počet řádků v tabulce, zohledňují se také hodnoty NULL

Pokud dotaz používá klíčové slovo DISTINCT, budou před použitím funkce COUNT odstraněny všechny duplicitní hodnoty ve sloupci.

Funkce COUNT_BIG podobně jako funkce COUNT. Jediný rozdíl mezi nimi je typ výsledku, který vracejí: funkce COUNT_BIG vždy vrací hodnoty typu BIGINT, zatímco funkce COUNT vrací datové hodnoty typu INTEGER.

V MÁME nabídku definuje podmínku, která platí pro skupinu řádků. Pro skupiny řádků má stejný význam jako klauzule WHERE pro obsah odpovídající tabulky (WHERE platí před seskupením, HAVING po).

Pro shrnutí informací obsažených v databázi poskytuje SQL agregační funkce. Agregační funkce bere jako argument celý sloupec dat a vrací jedinou hodnotu, která určitým způsobem shrnuje tento sloupec.

Například agregační funkce AVG() vezme sloupec čísel jako argument a vypočítá jejich průměr.

Pro výpočet průměrného příjmu na hlavu obyvatele Zelenogradu potřebujete následující dotaz:

VYBERTE „PRŮMĚRNÝ PŘÍJEM NA KAPITÁLU=“, AVG (SUMD)

SQL má šest agregačních funkcí, které vám umožňují získat různé typy souhrnné informace (obr. 1):

– SUM() vypočítá součet všech hodnot obsažených ve sloupci;

– AVG() vypočítá průměr hodnot obsažených ve sloupci;

– MIN() vyhledá nejmenší ze všech hodnot obsažených ve sloupci;

– MAX() najde největší ze všech hodnot obsažených ve sloupci;

– COUNT() počítá počet hodnot obsažených ve sloupci;

– COUNT(*) počítá počet řádků v tabulce výsledků dotazu.

Argumentem agregační funkce může být jednoduchý název sloupce, jako v předchozím příkladu, nebo výraz, jako v následujícím dotazu, který specifikuje výpočet průměrné daně na hlavu:

VYBRAT AVG (SUMD*0,13)

Tento dotaz vytvoří dočasný sloupec obsahující hodnoty (SUMD*0,13) pro každý řádek tabulky PERSON a poté vypočítá průměr dočasného sloupce.

Výši příjmu pro všechny obyvatele Zelenogradu lze vypočítat pomocí agregační funkce SUM:

VYBERTE SOUČET (SUMD) OD OSOBY

Agregační funkci lze také použít k výpočtu součtů z tabulky výsledků získané spojením několika zdrojových tabulek. Můžete například vypočítat celkovou výši příjmu, který obyvatelé obdrželi ze zdroje zvaného „stipendium“:

VYBERTE SOUČET (PENÍZE)

ZE ZISKU, HAVE_D

WHERE PROFIT.ID=HAVE_D.ID

AND PROFIT.SOURCE=’Stipendium’

Agregační funkce MIN() a MAX() umožňují najít nejmenší a nejvyšší hodnotu v tabulce. Sloupec může obsahovat číselné nebo řetězcové hodnoty nebo hodnoty data nebo času.

Můžete například definovat:

a) nejmenší celkový příjem, přijaté rezidenty a nejvyšší splatná daň:

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

b) data narození nejstaršího a nejmladšího obyvatele:

VYBERTE MIN (RDATE), MAX (RDATE)

c) příjmení, křestní jména a patronymie úplně prvního a posledního obyvatele v seznamu, řazené abecedně:

VYBERTE MIN (FIO), MAX (FIO)

Při používání těchto agregačních funkcí si musíte pamatovat, že číselná data se porovnávají pomocí aritmetických pravidel, data se porovnávají postupně (dřívější hodnoty data jsou považovány za menší než pozdější) a časové intervaly se porovnávají na základě jejich trvání.

Při použití funkcí MIN() a MAX() s řetězcovými daty závisí výsledek porovnání dvou řetězců na použité tabulce kódování znaků.

Agregační funkce COUNT() počítá počet hodnot ve sloupci libovolného typu:

a) Kolik bytů je v 1. mikrookresu?

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

b) kolik obyvatel má zdroje příjmu?

VYBERTE POČET (ODLIŠNÉ NOM) OD HAVE_D

c) Kolik zdrojů příjmů využívají rezidenti?

SELECT COUNT(DISTINCT ID) FROM HAVE_D (Klíčové slovo DISTINCT určuje, že se počítají neduplicitní hodnoty ve sloupci).

Speciální agregační funkce COUNT(*) počítá řádky ve výsledkové tabulce, nikoli datové hodnoty:

(a) Kolik bytů je ve 2. mikrookresu?

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

b) kolik zdrojů příjmů má Ivan Ivanovič Ivanov?

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

c) kolik obyvatel žije v bytě na určité adrese?

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

Jedním ze způsobů, jak porozumět tomu, jak se provádějí souhrnné dotazy s agregačními funkcemi, je představit si provádění dotazu jako rozdělené na dvě části. Nejprve určíme, jak by dotaz fungoval bez agregačních funkcí a vracel více řádků výsledků. Agregační funkce se pak použijí na výsledky dotazu a vrátí jeden výsledný řádek.

Zvažte například následující složitý dotaz: najděte průměrný celkový příjem na hlavu, součet celkových příjmů rezidentů a průměrný výnos zdroje jako procento z celkového příjmu rezidenta. Operátor dává odpověď

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

Bez agregačních funkcí by dotaz vypadal takto:

VYBERTE SOUČET, SOUČET, PENÍZE/SOUČET OD OSOBY, PROFIT, HAVE_D WHERE PERSON.NOM=HAVE_D.NOM AND HAVE_D.ID=PROFIT.ID

a vrátí jeden řádek výsledků pro každého rezidenta a konkrétní zdroj příjmu. Agregační funkce používají sloupce tabulky výsledků dotazu k vytvoření jednořádkové tabulky se souhrnnými výsledky.

Ve vráceném řádku sloupce můžete zadat agregační funkci místo jakéhokoli názvu sloupce. Může být například součástí výrazu, který přidává nebo odečítá hodnoty dvou agregačních funkcí:

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

Agregační funkce však nemůže být argumentem jiné agregační funkce, tzn. Vnořené agregační funkce jsou zakázány.

Seznam vrácených sloupců také nemůže používat agregační funkce a běžné názvy sloupců současně, protože to nedává smysl, například:

VYBERTE FIO, SOUČET (SUMD) OD OSOBY

Zde první prvek seznamu instruuje DBMS, aby vytvořil tabulku, která se bude skládat z několika řádků a bude obsahovat jeden řádek pro každého rezidenta. Druhý prvek seznamu požádá DBMS o získání jediné výsledné hodnoty, která je součtem hodnot ve sloupci SUMD. Tyto dva pokyny si odporují, což vede k chybě.

Výše uvedené neplatí pro případy zpracování poddotazů a dotazů se seskupováním.

Použití agregačních funkcí

SQL definuje mnoho vestavěných funkcí různých kategorií, mezi nimiž zvláštní místo zaujímají agregační funkce, které pracují s hodnotami sloupců mnoha řádků a vracejí jedinou hodnotu. Argumenty agregačních funkcí mohou být jak sloupce tabulky, tak výsledky výrazů nad nimi. Samotné agregační funkce lze zahrnout do dalších funkcí. aritmetické výrazy. Následující tabulka ukazuje nejčastěji používané standardní unární agregační funkce.


Obecný formát unární agregační funkce je následující:

název_funkce([VŠECHNY | DISTINCT] výraz)

kde DISTINCT označuje, že funkce by měla pouze uvažovat různé významy argument a ALL - všechny hodnoty, včetně duplikátů (tato možnost se používá ve výchozím nastavení). Například funkce AVG s klíčovým slovem DISTINCT pro řádky sloupců s hodnotami 1, 1, 1 a 3 vrátí 2, a pokud je přítomno klíčové slovo ALL, vrátí 1,5.

Agregační funkce se používají v klauzulích SELECT a HAVING. Zde se podíváme na jejich použití v klauzuli SELECT. V tomto případě se výraz v argumentu funkce vztahuje na všechny řádky ve vstupní tabulce klauzule SELECT. Kromě toho nemůžete v klauzuli SELECT používat agregační funkce i sloupce tabulky (nebo výrazy s nimi), pokud nemáte klauzuli GROUP BY, na kterou se podíváme v další části.

Funkce COUNT má dva formáty. V prvním případě je vrácen počet řádků ve vstupní tabulce, ve druhém případě je vrácen počet hodnot argumentů ve vstupní tabulce:

  • POČÍTAT(*)
  • POČET(výraz)

Nejjednodušším způsobem použití této funkce je spočítat počet řádků v tabulce (všech nebo těch, které splňují zadanou podmínku). K tomu se používá první možnost syntaxe.

Dotaz: Počet typů produktů, pro které jsou dostupné informace v databázi.

SELECT COUNT(*) AS "Počet typů produktů"

OD Produktu

Ve druhé verzi syntaxe funkce COUNT lze název použít jako argument samostatný sloupec. V tomto případě se počítá buď všech hodnot v tomto sloupci vstupní tabulky, nebo pouze neopakujících se (pomocí klíčového slova DISTINCT).

Dotaz: Počet odlišných jmen obsažených v tabulce Zákazník.

VYBRAT POČET (DISTINCT FNAME)

OD ZÁKAZNÍKA

Použití dalších unárních agregačních funkcí je podobné jako COUNT, s výjimkou MIN a MAX využití klíčová slova DISTINCT a ALL nedávají smysl. S funkcemi COUNT, MAX a MIN lze kromě číselných polí použít i znaková pole. Pokud argument agregační funkce neobsahuje žádné hodnoty, funkce COUNT vrátí 0 a všechny ostatní vrátí Hodnota NULL.

SELECT MAX (OrdDate)

Z

KDE Datum objednávky"1.09.2010"

Zadání pro samostatná práce: Uveďte to v jazyce SQL dotazy vzorkovat následující údaje:

  • Celkové náklady na všechny objednávky;
  • Počet různých měst obsažených v tabulce Zákazník.



Nahoru