Acest capitol explica cum informatiile concise pot fi obtinute pen- tru grupuri de siruri folosind functiile de grup.
Vom discuta cum puteti divide sirurile dintr-o tabela in seturi mai mici si cum sa specificati criteriile de cautare intr-un grup de siruri.
Functiile de grup se aplica unui set de siruri.Ele intorc rezultate bazate pe grupuri de siruri , spre deosebire de un rezultat pe sir care e returnat de functii singulare.De regula , toate sirurile din tabela sunt tratate ca un grup.Clauza GROUP BY din cadrul lui SELECT e folosita pentru a imparti sirurile in grupuri mai mici.
Functiile de grup sunt listate mai jos:
Valoare returnata
Toate functiile de deasupra opereaza pe un nr. de siruri (de ex., o intreaga tabela) si sunt cunoscute ca functii de grup sau agregate. DISTINCT face ca functia de grup sa considere doar valorile(nedupli- cate).
ALL considera fiecare valoare , incluzind si toate duplicatele.
Implicit este ALL.
Tipul datelor argumentelor poate fi CHAR,NUMBER sau DATA unde expr
e listata.
Toate fuctiile de grup cu exceptia lui COUNT(*) ignora valorile nule.
Folositi NVL ca de obicei pentru a include null.
FUNCTII DE GRUP
Pentru a calcula salriul mediu al tuturor angajatilor, introducem :
SELECT AVG(SAL)
FROM EMP;
AVG(SAL)
--------
2073.21429
Notati ca liniile din tabela EMP sint considerate ca un singur grup.
O functie de grup poate fi aplicata pe un subset de linii din tabela prin folosirea clauzei WHERE.
Pentru a gasi salariul minim cistigat de un functionar, introducem :
SELECT MIN(SAL)
FROM EMP
WHERE JOB = 'CLERK';
MIN(SAL)
--------
800
Pentru a numara angajatii din departamentul 20, introducem :
SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 20;
COUNT(*)
--------
5
Clauza GROUP BY poate fi folosita pentru a imparti liniile dintr-o tabela in grupuri mai mici. Functiile de rup pot fi folosite pentru a intorece informatii sumare pentru fiecare grup.
Pentru a calcula salariul mediu pentru fiecare functie diferita, introducem:
SELECT JOB, AVG(SAL)
FROM EMP
GROUP BY JOB;
JOB AVG(SAL)
------- -----------
ANALYST 3000
CLERK 1037.5
MANAGER 2758.33333
PRESIDENT 5000
SALESMAN 1400
Liniile pot fi excluse mai intii cu o clauza WHERE, inainte de a le imparti in grupuri.
Pentru a determina salariul mediu pentru fiecare functie in afara de manager, introducem :
SELECT JOB, AVG(SAL)
FROM EMP
WHERE JOB != 'MANAGER'
GROUP BY JOB;
JOB AVG(SAL)
------- -----------
ANALYST 3000
CLERK 1037.5
PRESIDENT 5000
SALESMAN 1400
SELECT MIN(SAL) MINIMUM
FROM EMP;
SELECT MAX(SAL), MIN(SAL), AVG(SAL)
FROM EMP;
SELECT JOB,
MAX(SAL) MAXIMUM,
MIN(SAL) MINIMUM
FROM EMP
GROUP BY JOB;
SELECT COUNT(*) MANAGERS
FROM EMP
WHERE JOB = 'MANAGER';
SELECT JOB,
AVG(SAL) AVSAL,
AVG(SAL * 12 + NVL(COMM, 0)) AVCOMP
FROM EMP
GROUP BY JOB;
SELECT MAX(SAL) - MIN(SAL) DIFFERENCE
FROM EMP;
SELECT DEPTNO, COUNT(*)
FROM EMP
GGROUP BY DEPTNO
HAVING COUNT(*) > 3;
SELECT EMPNO
FROM EMP
GROUP BY EMPNO
HAVING COUNT(*) > 1;
SELECT MGR, MIN(SAL)
FROM EMP
GROUP BY MGR
HAVING MIN(SAL) >= 1000
ORDER BY MIN(SAL);