Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Cuza Iai
Facultatea de Economie i Administrarea Afacerilor
Departamentul de Contabilitate, Informatic economic i
Statistic
SQL (6)
Cteva fineuri SQL: interogri
ierarhice/recursive, funcii
OLAP, subconsultri corelate,
tabele virtuale
Marin
Fotache
);
Subconsultri corelate
SELECT
AS NrCrt_Sept07, f1.*
FROM facturi f1
WHERE EXTRACT (YEAR FROM DataFact)=2011 AND
EXTRACT (MONTH FROM DataFact)=9
ORDER BY 1
Funcii OLAP - 1
Funcie
Descriere
row_number()
rank()
dense_rank()
percent_rank()
cume_dist()
Funcii OLAP - 2
Function
Description
lead(valueany
[,offsetinteger
[,defaultany]])
first_value(valuea
ny)
last_value(valuea
ny)
nth_value(value
any,nthinteger)
ntile(num_buckets
integer)
RANK() - 1
S se afieze clasamentul general al productivitii
zilelor de facturare, n funcie de numrul de facturi
RANK() - 2
S se afieze clasamentul lunar pentru
anul 2011 al productivitii zilelor de
facturare, n funcie de numrul de
facturi emise
SELECT DataFact, COUNT(*) AS
Nr_Facturilor,
RANK() OVER (PARTITION BY EXTRACT
(MONTH FROM DataFact)
ORDER BY COUNT(*) DESC) AS
Pozitie
Fiecare partiie se constituie
FROM facturi
Criteriul de ierarhizare
la nivel de lun
Prima partiie
A doua partiie
A treia partiie
RANK() - 3
S se afieze, pentru fiecare zi de facturare din anul
2011, poziiile din clasamentul lunar i din
clasamentul anual ale de numrului zilnic de facturi
emise
SELEC T D ataFact, CO U N T(*) AS N r_Facturilor,
RAN K() O VER (PARTITIO N BY EXTRACT (M O N TH
FRO M D ataFact) O RD ER BY C O U N T(*) D ESC) AS
Pozitie_Luna,
RAN K() O VER (O RD ER BY CO U N T(*) D ESC) AS
Pozitie_An
FRO M facturi
W H ERE EXTRAC T (YEAR FRO M D ataFact) = 2011
G RO U P BY D ataFact O RD ER BY D ataFact
Clasament la nivelul
ntregului set de
nregistrri (lipsete
clauza PARTITION)
Criteriul de ierarhizare
Clasament la nivel de zi
Funcia DENSE_RANK()
SELECT DataFact, COUNT(*) AS
Nr_Facturilor,
RANK() OVER (ORDER BY COUNT(*)
DESC) AS Poz_RANK,
DENSE_RANK() OVER (ORDER BY
COUNT(*) DESC) AS
Poz_DENSE_RANK
FROM facturi
GROUP BY DataFact
Rezultat DENSE_RANK()
Funcia ROW_NUMBER() - 1
S se afieze, pe o coloan separat, numrul
curent al fiecrei facturi emise n luna
septembrie 2011
SELEC T RO W _N U M BER() O VER (O RD ER BY N rFact) AS
N rC rt, facturi.*
FRO M facturi
W H ERE EXTRAC T (YEAR FRO M D ataFact) = 2011 AN D
EXTRAC T (M O N TH FRO M D ataFact) = 9
O RD ER BY 1
Funcia ROW_NUMBER() - 2
Care sunt cele mai mari cinci preuri unitare?
SELECT PretUnit
FROM
(SELECT PretUnit,
ROW_NUMBER () OVER
(ORDER BY PretUnit DESC) AS Poz
FROM
(SELECT DISTINCT PretUnit
FROM liniifact
) t1
) t2
WHERE Poz <=5
partiionarea
ordonarea
grupurile de agregare
SELECT DenCl,t.*
FROM (
SELECT F.NrFact, DataFact AS Data, ROUND(SUM(Cantitate * PretUnit * (1+ProcTVA)),0)
AS Facturat, 0 AS Incasat
FROM produse p INNER JOIN liniifact lf ON p.CodPr=lf.CodPr
INNER JOIN facturi f ON lf.NrFact=f.NrFact
WHERE EXTRACT (YEAR FROM DataFact)=2011 AND EXTRACT (MONTH FROM
DataFact)=8
GROUP BY F.NrFact, DataFact
UNION
SELECT NrFact, DataInc AS Data, 0 AS Facturat, Transa AS Incasat
FROM incasari i INNER JOIN incasfact if ON i.CodInc=if.CodInc
WHERE EXTRACT (YEAR FROM DataInc)=2011 AND EXTRACT (MONTH FROM DataInc)=8
) t INNER JOIN facturi f ON t.NrFact=f.NrFact
INNER JOIN clienti c ON f.CodCl=c.CodCl
AS Incasat
Linii de
solduri
iniale (ale
lunii
sept.2011)
Un soi de fie-ah
Tabele virtuale
Engl. View
Rom: tabel virtual, imagine, vedere, view