Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Agregarea datelor. Operatorii CUBE si ROLLUP

sql


Agregarea datelor. Operatorii CUBE si ROLLUP

Agregarea simultana a datelor dupa mai multi parametrii (dimensiuni) însotita de determinarea subtotalurilor aferente face obiectul asa-numitei analize multidimensionale. Aceasta se bazeaza pe utilizarea functiilor a 636j98g nalitice dedicate procesarii analitice on-line (On Line Analytical Processing - OLAP) si care au fost introduse în Oracle începând cu versiunea 8i a acestuia.



Exemplu :

Se sa genereze, prin interogarea corespunzatoare a tabelei oferte_proprietati, un raport de forma urmatoare : acesta va contine valoarea medie a pretului cerut (indicatorul analizat) calculata la nivelul fiecarei combinatii zona - tip_proprietate, precum si la nivelul fiecarei zone (indiferent de tipul de proprietate) în parte, la nivelul fiecarui tip de proprietate (indiferent de zona de care apartine) în parte, precum si la nivel global. Într-o varianta clasica se propune o formulare bazata pe operatorul asamblist UNION, ce apoi este exprimata succint cu ajutorul functiei CUBE.

Obs. Structura tabelei oferte_proprietati este: codinreg, tippropr, zona, str, nr, bl, sc, ap, et, pcerut, pmin, moneda, telfix, telmob, obs.

SELECT zona, tippropr AS Tip_Proprietate, AVG(pcerut) AS Pret_Mediu_Cerut

FROM oferte_proprietati

GROUP BY zona, tippropr

UNION

SELECT zona, '', AVG(pcerut)

FROM oferte_proprietati

GROUP BY zona

UNION

SELECT '', tippropr, AVG(pcerut)

FROM oferte_proprietati

GROUP BY tippropr

UNION

SELECT '', '', AVG(pcerut)

FROM oferte_proprietati

ORDER BY 1  ;


SELECT zona, tippropr AS Tip_Proprietate, AVG(pcerut) AS Pret_Mediu_Cerut

FROM lista_proprietati

GROUP BY CUBE (zona, tippropr) ;

Exemplu :

Se sa genereze, prin interogarea corespunzatoare a tabelei oferte_proprietati, urmatoarele doua rapoarte

SELECT zona, tippropr AS Tip_Proprietate, AVG(pcerut) AS Pret_Mediu_Cerut

FROM lista_proprietati

GROUP BY ROLLUP (zona, tippropr) ;

SELECT zona, tippropr AS Tip_Proprietate, AVG(pcerut) AS Pret_Mediu_Cerut

FROM lista_proprietati

GROUP BY ROLLUP (tippropr, zona) ;

Operatori asamblisti

Acestia combina doua sau mai multe interogari, efectând operatii specifice multimilor: reuniune, intersectie, diferenta. Ei se mai numesc si operatori verticali, deoarece combinarea celor doua interogari se face câmp cu câmp (coloana cu coloana). Din acest motiv, numarul total de câmpuri si tipurile de date ale câmpurilor corespondente din cele doua interogari trebuie sa coincida.

Exemplu :

Se va formula urmatoarea interogare :

sa se utilizeze operatorul UNION pentru a concatena pozitiile celei de a doua facturi la pozitiile primei facturi

sa se afiseze produsele solicitate de clientul 1001 si 1002 se va folosi operatorul INTERSECT

sa se afiseze produsele din care nu s a facturat nimic

SELECT * FROM facturi WHERE nrfact = 1

UNION

SELECT * FROM facturi WHERE nrfact = 2;

SELECT liniifact.codpr FROM liniifact, facturi

WHERE liniifact.nrfact = facturi.nrfact AND codcl = 1001

INTERSECT

SELECT liniifact.codpr FROM liniifact, facturi

WHERE liniifact.nrfact = facturi.nrfact AND codcl = 1002;

3. SELECT produse.codpr

FROM produse, liniifact

WHERE produse.codpr = liniifact.codpr (+)

MINUS

SELECT produse.codpr

FROM produse, liniifact

WHERE produse.codpr = liniifact.codpr;

Subinterogari

O subinterogare este o comanda SELECT inclusa în alta fraza SELECT. Rezultatele subinterogarii sunt transmise interogarii principale, subinterogarea putând fi utilizata în cadrul clauzelor FROM, WHERE sau HAVING ale acesteia.

Exemplu :

Se vor formula urmatoarele interogari

sa se afiseze produsul (podusele) din care s-a facturat cel mai mult

sa se determine facturile emise în luna septembrie 2005; sa se afiseze atật pozitiile facturate cật si valoarea totala a acestor facturi

sa se afiseze un centralizator cu facturarile produselor conform imaginii urmatoare

sa se afiseze produsele din care nu s a facturat nimic

1. SELECT codpr, SUM (cantitate * pretunit) AS val_produs

FROM liniifact

GROUP BY codpr

HAVING SUM(cantitate * pretunit) =

(SELECT MAX(SUM(cantitate * pretunit))

FROM liniifact

GROUP BY codpr);

sau

SELECT codpr, SUM (cantitate * pretunit) AS val_produs

FROM liniifact

GROUP BY codpr

HAVING SUM (cantitate * pretunit) >= ALL

(SELECT SUM(cantitate * pretunit)

FROM liniifact

GROUP BY codpr);

sau

SELECT *

FROM (SELECT codpr, SUM(cantitate * pretunit) AS val_prod

FROM liniifact

GROUP BY codpr)

WHERE val_prod = (SELECT MAX (SUM (cantitate * pretunit))

FROM liniifact

GROUP BY codpr);

SELECT liniifact.nrfact, linie, codpr, cantitate * pretunit AS v_prod, v_fact

FROM liniifact,

(SELECT liniifact.nrfact AS fact, SUM(cantitate * pretunit) AS v_fact

FROM facturi, liniifact

WHERE facturi.nrfact = liniifact.nrfact AND

TO_CHAR(datfact,'MM/YY') = '09/05'

GROUP BY liniifact.nrfact)

WHERE liniifact.nrfact = fact;

SELECT cod1 AS produs, nrfact, valoare, total

FROM

(SELECT codpr AS cod1, nrfact, SUM(cantitate * pretunit) AS valoare

FROM liniifact

GROUP BY codpr, nrfact),

(SELECT codpr AS cod2, SUM(cantitate * pretunit) AS total

FROM liniifact

GROUP BY codpr)

WHERE cod1 = cod2;

4. SELECT codpr, denpr

FROM produse

WHERE codpr NOT IN (SELECT codpr

FROM liniifact)


Document Info


Accesari: 2303
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )