Sunteți pe pagina 1din 11

OLAP în SQL

Curs

1
Clasamente
 SELECT datav, nr_facturi, ROWNUM
AS pozitie FROM( SELECT datav,
COUNT(*) AS nr_facturi FROM vanzari
GROUP BY datav ORDER BY nr_facturi
DESC);
 Duce, practic, la o numerotare, nu
neapărat clasificare;
 Soluţii: în SQL:1999- RANK şi
DENSE_RANK.
2
Clasamente
 Procesarea interogărilor ce utilizează
funcţii analitice se derulează în trei
etape:
 Se operează toate joncţiunile, se constituie
grupurile şi se efectuează selecţia asupra
grupurilor, altfel spus, se execută clauzele
JOIN, WHERE, GROUP BY şi HAVING;
 Se „aranjează” rezultatul în vederea aplicării
funcţiilor analitice şi se efectuează calculele,
creându-se anumite partiţii, apoi
 Funcţiile analitice sunt aplicate linie cu linie
în cadrul fiecărei partiţii.

3
Clasamente
 Pasul 3 este posibil numai dacă interogarea
prezintă o clauză ORDER BY;
 Partiţiile sunt seturi de linii create după
delimitarea grupurilor prin GROUP BY, astfel
încât pot constitui subiectul oricărei funcţii de
agregare a datelor;
 SELECT datav, COUNT(*) as nr_facturi, RANK()
OVER (ORDER BY COUNT(*) DESC) AS pozitie
FROM vanzari GROUP BY datav;
 Funcţia RANK() realizează o ierarhizare atribuind
aceeaşi poziţie în clasament pentru liniile cu
valori egale.

4
Clasamente–exemple agregate
 Să se afişeze poziţia unui angajat care
ar încasa un salariu de 10000 dolari şi
un comision de 10%
 SELECT RANK(10000, .1) WITHIN GROUP
(ORDER BY salary, commission_pct) "Rank"
FROM employees;
 Să se afişeze poziţia unui salariu de
10000 între salariile angajaţilor
 SELECT RANK(10000) WITHIN
GROUP(ORDER BY salary DESC) "Rank"
FROM employees;
5
Clasamente–exemple agregate
 Să se afişeze poziţia unui angajat care
ar încasa un salariu de 10000 dolari şi
un comision de 10%
 SELECT DENSE_RANK(10000, .1) WITHIN
GROUP (ORDER BY salary, commission_pct)
“Dense Rank" FROM employees;
 Să se afişeze poziţia unui salariu de
10000 între salariile angajaţilor
 SELECT DENSE_RANK(10000) WITHIN
GROUP(ORDER BY salary DESC) “Dense
Rank" FROM employees;
6
Clasamente
 RANK vs. DENSE_RANK

numar rank Denserank


4 1 1
4 1 1
3 3 2
2 4 3
2 4 3

7
Clasamente–exemple agregate
 Partiţii:
 SELECT department_id, last_name, salary,
commission_pct, RANK() OVER (PARTITION
BY department_id ORDER BY salary DESC,
commission_pct) "Rank„ FROM employees
WHERE department_id = 80;
 SELECT d.department_name, e.last_name,
e.salary, DENSE_RANK() OVER (PARTITION
BY e.department_id ORDER BY e.salary) AS
drank FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.department_id IN ('30', '40');
8
OLAP - Alte funcţii statistice
 CUME_DIST
 Calculează poziţia unei valori specificate
X relativă la o mulţime M de N valori;
 Reprezintă numărul de valori (diferite
sau egale cu X) din M ce îl precede pe
x(în ordinea specificată)/N
numar cumedist
4 0.4
4 0.4
3 0.6
2 1
9
2 1
OLAP - Alte funcţii statistice
 PERCENT_RANK
 Întoarce poziţia procentuală a unei linii în
cadrul unei partiţii;
 (poziţia liniei în partiţie-1)/(numărul
liniilor în partiţie-1)

numar percentrank
4 0
4 0
3 0.5
2 1
10
2 1
OLAP - Alte funcţii statistice
 NTILE(3) şi NTILE(4)
 Calculează tertile şi cuartile
numar tertile cuartile
4 1 1
4 1 1
3 2 2
2 2 3
2 3 4

11

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