Documente Academic
Documente Profesional
Documente Cultură
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
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