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);