Sunteți pe pagina 1din 2

Baze de date (Funcţii-2) Lab.

Utilizarea funcţiilor în sistemul ORACLE (continuare)

Funcţii grup (agregat)

Funcţiile grup operează pe „mulţimi” de linii şi returnează un rezultat pe grup. Aceste „mulţimi” de linii pot fi
reprezentate de întregul tabel sau de tabelul împărţit în grupuri.
Sistemul Oracle acceptă următoarele funcţii grup: COUNT, MIN, MAX, AVG, SUM, VARIANCE, STDDEV.

Funcţia Descriere
AVG([DISTINCT|ALL]n)
Calculează valoarea medie a lui n, ignorând valorile nule(null).
Determină numărul de linii, unde expr e diferit de null. Numără
COUNT({*|[DISTINCT|ALL]expr})
toate rândurile selectate folosind *, incluzând duplicatele şi
rândurile cu valori null.
MAX([DISTINCT|ALL]expr)
Determină valoarea maximă a expr, ignorând rândurile null.
MIN([DISTINCT|ALL]expr)
Determină valoarea minimă a expr, ignorând rândurile null.
STDDEV([DISTINCT|ALL]x)
Determină deviaţia standard a expr, ignorând rândurile null.
SUM([DISTINCT|ALL]n)
Calculează suma valorilor lui n, ignorând valorile null.
VARIANCE([DISTINCT|ALL]x)
Calculează varianţa valorilor lui n, ignorând valorile null.

Observaţii:
¾ DISTINCT- determină luarea în considerare doar a valorilor „neduplicate”.
¾ ALL- determină luarea în considerare a fiecărei valori, inclusiv a duplicatelor. ALL este implicit şi nu e necesar să fie
specificat.
¾ Toate funcţiile grup, cu excepţia funcţiei COUNT(), ignoră valorile null.
Funcţia COUNT() are două formate:
ƒ COUNT(*)- returnează numărul de linii din tabel, incluzând duplicatele şi rândurile cu valori null;
ƒ COUNT(expr)- returnează numărul de linii non-null în coloana identificată prin expr.
¾ Funcţiile COUNT, MIN, MAX pot fi aplicate unor câmpuri numerice sau nenumerice; restul funcţiilor se aplică doar
câmpurilor numerice.
¾ Funcţiile grup pot să apară doar în lista de la SELECT sau în clauza HAVING.

Exemple:

¾ Afişaţi salariul minim, maxim, mediu şi suma salariilor pentru angajaţii al căror „job” începe cu „SALES”

¾ Afişaţi angajatul care are cea mai mare vechime şi pe cel care are cea mai mică vechime:

¾ Afişaţi angajatul care are este primul şi pe cel care este ultimul în ordinea alfabetică a numelui:

¾ Afişaţi numărul angajaţilor din departamentul 30:

¾ Afişaţi numărul persoanelor din departamentul 30 care pot câştiga comision:

¾ Afişaţi numărul departamentelor din tabelul EMP:

¾ Afişaţi numărul departamentelor distincte din tabelul EMP:

¾ Afişaţi comisionul mediu al angajaţilor:

1
Baze de date (Funcţii-2) Lab.4

În exemplele de mai sus, funcţiile grup au tratat tabelul ca un grup larg de informaţii.
În anumite cazuri, este nevoie ca tabelul să fie împărţit în grupuri mai mici. Aceasta poate fi făcută folosind clauza GROUP BY
în sintaxa comenzii SELECT:
SELECT coloana, funcţie_grup
FROM tabel
[WHERE conditii]
[GROUP BY expresie_grupare]
[HAVING conditie_grup]
[ORDER BY coloana];
expresie_grupare reprezintă coloana (coloanele) a cărei valori constituie baza pentru liniile grupate;
conditie_grup reprezintă condiţia care restricţionează grupurile de linii returnate (la cele care îndeplinesc condiţia).
De reţinut:
™ dacă includeţi o funcţie grup într-o clauză SELECT, nu puteţi selecta rezultate individuale decât în cazul în
care coloana apare în clauza GROUP BY;
™ folosiţi clauza WHERE pentru a exclude linii înaintea divizării lor în grupuri;
™ trebuie să includeţi coloanele în clauza GROUP BY;
™ nu puteţi folosi aliasul coloanei în clauza GROUP BY;
™ implicit, rândurile sunt sortate-în ordinea crescătoare a coloanei incluse în clauza GROUP BY; se poate
rescrie această ordonare prin folosirea clauzei ORDER BY.

Exemple:

¾ Afişaţi salariul mediu pe fiecare departament:

¾ Afişaţi salariul mediu pe fiecare departament în ordinea crescătoare a salariului mediu:

¾ Afişaţi salariul total plătit pentru fiecare job în cadrul fiecărui departament:

¾ Afişaţi codul departamentului şi salariul mediu pe departament, pentru departamentele în care salariul mediu depăşeşte
$200:

¾ Afişaţi salariul maxim pe departamentele în care salariul maxim depăşeşte $2900:

¾ Afişaţi meseria şi salariul lunar total pe fiecare meserie, pentru meseriile pentru care acesta depăşeşte $5000; excludeţi
pe cei care sunt „SALESMAN” şi ordonaţi lista după salariul lunar total:

¾ Afişaţi salariul mediu maxim al departamentelor:

¾ Afişaţi salariul minim, maxim, suma salariilor şi salariul mediu folosind aliasurile Min, Max, Suma, Medie; rotunjiţi
rezultatele la valori întregi:

¾ Afişaţi aceleaşi cerinţe de mai sus grupate pe fiecare meserie:

¾ Afişaţi numărul de manageri (fără a afişa numele lor):

¾ Afişaţi codul managerilor şi salariul minim pe care l-a obţinut fiecare manager; excludeţi angajaţii care nu au manager,
precum şi grupurile pentru care salariul minim este mai mic de $1000. Sortaţi rezultatele în ordine descrescătoare a
salariului:

¾ Afişaţi numele departamentului, numele locaţiei, numărul de angajaţi şi salariul mediu al tuturor angajaţilor din
departament.

S-ar putea să vă placă și