Extras din referat
CREATE TABLE angajati( cod_angajat NUMBER(4),
cod_departament NUMBER(2),
nume_slujba VARCHAR2(13),
val_salariu NUMBER(10 );
INSERT INTO angajati VALUES(7934,10,'FUNCTIONAR',1300);
INSERT INTO angajati VALUES(7782,10,'MANAGER',2450);
INSERT INTO angajati VALUES(7839,10,'PRESEDINTE',5000);
INSERT INTO angajati VALUES(7788,20,'ANALIST',3000);
INSERT INTO angajati VALUES(7902,20,'ANALIST',3000);
INSERT INTO angajati VALUES(7369,20,'FUNCTIONAR',800);
INSERT INTO angajati VALUES(7876,20,'FUNCTIONAR',1100);
INSERT INTO angajati VALUES(7566,20,'MANAGER',2975);
INSERT INTO angajati VALUES(7900,30,'FUNCTIONAR',950);
INSERT INTO angajati VALUES(7698,30,'MANAGER',2850);
INSERT INTO angajati VALUES(7499,30,'VANZATOR',1600);
INSERT INTO angajati VALUES(7654,30,'VANZATOR',1250);
INSERT INTO angajati VALUES(7844,30,'VANZATOR',1500);
INSERT INTO angajati VALUES(7521,30,'VANZATOR',1250);
SELECT * FROM angajati ORDER BY val_salariu asc;
COD_ANGAJAT COD_DEPARTAMENT NUME_SLUJBA VAL_SALARIU
7369 20 FUNCTIONAR 800
7900 30 FUNCTIONAR 950
7876 20 FUNCTIONAR 1100
7654 30 VANZATOR 1250
7521 30 VANZATOR 1250
7934 10 FUNCTIONAR 1300
7844 30 VANZATOR 1500
7499 30 VANZATOR 1600
7782 10 MANAGER 2450
7698 30 MANAGER 2850
7566 20 MANAGER 2975
7788 20 ANALIST 3000
7902 20 ANALIST 3000
7839 10 PRESEDINTE 5000
Functii analitice versus functii de grup standard
Diferenta dintre functiile analitice si functiile de grup standard (cum ar fi AVG, SUM, etc.) e bazata pe faptul ca cele doua tipuri lucreaza pe seturi de valori definite in mod diferit. Functiile de grup standard ar produce o valoare pentru fiecare set de randuri, valoare definita de functia GROUP BY. Functiile analitice permit de asemenea gruparea randurilor definite de interogare, iar valoarea functiei analitice e bazata pe grupul de randuri. Diferenta e ca GROUP BY comprima randurile detaliate intr-un singur rand, pe cand functiile analitice produc o valoare pentru fiecare rand detaliat cuprins intr-un grup. Functiile analitice permit o grupare a randurilor definita de interogare si au valoarea bazata pe grupuri.
Interogarea de mai jos foloseste o functie de grup standard cu una GROUP BY pentru a produce suma salariilor pe grup definita de aceleasi NUME_SLUJBA si COD_DEPARTAMENT.
SELECT cod_departament,nume_slujba, SUM(val_salariu)
FROM angajati
GROUP BY cod_departament,nume_slujba;
COD_DEPARTAMENT NUME_SLUJBA SUM(VAL_SALARIU)
10 FUNCTIONAR 1300
10 MANAGER 2450
10 PRESEDINTE 5000
20 ANALIST 6000
20 FUNCTIONAR 1900
20 MANAGER 2975
30 FUNCTIONAR 950
30 MANAGER 2850
30 VANZATOR 5600
Urmatoarea interogare ilustreaza o functie analitica care produce aceeasi suma, dar afiseaza toate randurile. Se observa ca prima are 9 randuri rezultat, iar a doua 14.
SELECT cod_angajat,cod_departament,nume_slujba,
SUM(val_salariu) OVER (PARTITION BY cod_departament, nume_slujba ) sum_val_salariu FROM angajati;
COD_ANGAJAT COD_DEPARTAMENT NUME_SLUJBA SUM_VAL_SALARIU
7934 10 FUNCTIONAR 1300
7782 10 MANAGER 2450
7839 10 PRESEDINTE 5000
7788 20 ANALIST 6000
7902 20 ANALIST 6000
7369 20 FUNCTIONAR 1900
7876 20 FUNCTIONAR 1900
7566 20 MANAGER 2975
7900 30 FUNCTIONAR 950
7698 30 MANAGER 2850
7499 30 VANZATOR 5600
7654 30 VANZATOR 5600
7844 30 VANZATOR 5600
7521 30 VANZATOR 5600
Principala diferenta la acest punct care ajuta la recunoastere este ca functiile analitice nu comprima grupuri de randuri intr-unul singur asa cum fac functiile standard. Asta inseamna ca primele pot fi aplicate unui modul SQL continand un GROUP BY, insa singurele coloane (expresii) la care se poate face referire sunt cele care sunt grupate plus celelalte functii de grup.
Preview document
Conținut arhivă zip
- Baze de Date in Economie.doc