Pentru a rezuma rezultatele informațiilor conținute în baza de date, sunt furnizate funcții agregate SQL. O funcție agregată are ca argument o coloană de date ca un întreg, și returnează o singură valoare, care într-un anumit fel rezumă această coloană.
De exemplu, funcția agregată AVG () are ca argumente o coloană de numere, și calculează valoarea medie a acestora.
Pentru a calcula media venitului pe cap de locuitor al unui rezident al Zelenograd, au nevoie de o astfel de cerere:
'Venitul mediu =' SELECT, AVG (SUMD)
În SQL, există șase funcții agregate care vă permit să obțină diferite tipuri de informații de sinteză (Figura 1)
- USM () calculează suma tuturor valorilor conținute în coloana;
- AVG () calculează media între conținută într-o coloană de valori;
- MIN () este cea mai mică dintre toate valorile din coloana;
- MAX () este cea mai mare dintre toate valorile din coloana;
- COUNT () contorizează numărul de valori cuprinse în coloana;
- COUNT (*) contorizează numărul de rânduri din tabelul cu rezultatele interogării.
Argumentul unei funcții agregat poate fi un simplu nume de coloană, ca în exemplul anterior, sau expresie, ca în următoarea interogare, specificați calculul impozitului pe cap:
Când această solicitare, o coloană temporară care conține valori (SUMD * 0,13) pentru fiecare rând al persoanei de masă, iar apoi calculează valoarea medie a coloanei de timp.
Suma de venit pentru toți rezidenții Zelenograd poate fi calculată folosind funcția SUM agregată:
SELECT SUM (SUMD) de la o persoană
Funcția agregată poate fi utilizată pentru calcularea rezultatelor pe masa rezultatelor obținute prin conectarea mai multor tabele sursă. De exemplu, se poate calcula valoarea totală a veniturilor care este primită de locuitorii sursă intitulat „Granturi“:
Din profit, HAVE_D
În cazul în care profit.Id = have_d.Id
funcție agregată MIN () și MAX () permit de a găsi, respectiv, cele mai mici și cele mai mari valori din tabel. Astfel, coloana poate include valori numerice sau string sau valorile de timp sau data.
De exemplu, puteți determina:
(A), cel mai mic venit total primit de către locuitori, iar cea mai mare taxa de plătit:
SELECT MIN (SUMD), MAX (SUMD * 0,13)
(B) data nașterii dintre cele mai vechi și cei mai tineri rezidenți:
SELECT MIN (rdate), MAX (rdate)
(C) numele, prenumele și patronimicul foarte primul și ultimul locuitorii din listă, în ordine alfabetică:
SELECT MIN (FIO), MAX (FIO)
Aplicarea acestor funcții agregate, trebuie amintit că datele numerice este comparată cu normele de aritmetică, compararea a datelor are loc secvențial (datele valorice anterioare sunt considerate mai puțin decât mai târziu), compararea intervalelor de timp se efectuează pe baza duratei lor.
Când se utilizează funcția MIN () și MAX () cu datele șir, rezultatul compararea a două șiruri de caractere depinde de tabela de codificare.
COUNT funcție agregată () contorizează numărul de valori într-o coloană de orice tip:
(A) câte apartamente în primul cartier?
SELECT COUNT (ADR) FROM PLAT UNDE ADR LIKE '%, 1_ _-%'
(B) cât de mulți rezidenți au surse de venit?
SELECT COUNT (NOM DISTINCT) DIN HAVE_D
(C) surse de venituri cât de mult utilizate de către rezidenți?
SELECT COUNT (ID DISTINCT) DIN HAVE_D (cuvântul cheie DISTINCT indică faptul că valorile calculate nerecurente într-o coloană).
Specială COUNT funcție agregată (*) numără rândurile din tabelul de rezultate, și nu valorile datelor:
(A) câte apartamente în sectorul 2?
SELECT COUNT (*) din apartamentul unde '%, 2% __-' ADR LIKE
(B) cât de mult surse de venit pentru Ivanova Ivana Ivanovicha?
SELECT COUNT (*) de la o persoană, HAVE_D UNDE FIO = 'Ivanov Ivan Ivanovich' ȘI PERSON.NOM = HAVE_D.NOM
SELECT COUNT (*) de la persoană UNDE ADR = 'Zelenograd, 1001-1045'
O modalitate de a înțelege cum să executați o interogare totaluri cu funcții agregate este depuneti de execuție interogare este împărțit în două părți. În primul rând a determina cum să interogheze lucrat fără funcții agregate se întorc mai multe rânduri de rezultate. Apoi se aplică funcțiile agregate rezultatele interogării, revenind un șir final.
De exemplu, luați în considerare următoarea interogare complexă: Găsiți media pe cap de locuitor venitul total, cantitatea de rezidenți totalul de venituri, precum și o sursă de randament ridicat ca procent din totalul rezidenților de venit. Răspunsul dă operatorului
SELECT AVG (SUMD), USM (SUMD), (100 * AVG (BANI / SUMD)) de la o persoană, profit, HAVE_D UNDE PERSON.NOM = HAVE_D.NOM AND HAVE_D.ID = PROFIT.ID
Fără funcții agregate interogare ar arata astfel:
SELECT SUMD, SUMD, BANI / SUMD de la o persoană, profit, HAVE_D UNDE PERSON.NOM = HAVE_D.NOM ȘI HAVE_D.ID = PROFIT.ID
și de a reveni la un singur rând de rezultate pentru fiecare rezident și sursa specifică de venit. funcțiile agregate utilizând coloane într-un tabel cu rezultatele acestei interogări pentru un tabel cu o singură linie cu rezultatele finale.
În linia de coloana de retur în loc de numele oricărei coloane, puteți specifica o funcție agregată. De exemplu, acesta poate fi inclus într-o expresie care însumate sau scăzute valori ale celor două funcții agregate:
SELECT MAX (SUMD) -min (SUMD) de la o persoană
Cu toate acestea, o funcție agregată nu poate fi un argument pentru o altă funcție agregată, și anume, interzise funcțiile agregate imbricate.
În plus, lista returnată de coloane pe care nu se poate utiliza funcțiile agregate și numele coloanelor de obicei, din moment ce nu are sens, de exemplu:
SELECT FIO, SUM (SUMD) de la o persoană
Aici, primul element al listei indică faptul că SGBD pentru a crea un tabel, care va consta din mai multe rânduri și conțin câte un rând pentru fiecare locuitor. Al doilea element solicită baza de date pentru a obține o valoare rezultat, care este coloana suma SUMD. Aceste două direcții sunt contrare una față de cealaltă, rezultând într-o eroare.
Din acest motiv, fie toate referirile la coloanele returnate în lista de coloane trebuie să fie argumente de funcții agregate, sau în listă nu ar trebui să fie nici o funcție agregată.
Acest lucru nu se aplică în cazurile de prelucrare a sub-interogări și interogări cu grupul.