Teradata - OLAP İşlevleri
OLAP işlevleri, toplama işlevlerinin yalnızca bir değer döndürmesi dışında, OLAP işlevinin toplamalara ek olarak ayrı satırları sunması dışında toplama işlevlerine benzer.
Sözdizimi
OLAP işlevinin genel sözdizimi aşağıdadır.
<aggregate function> OVER
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
Toplama işlevleri SUM, COUNT, MAX, MIN, AVG olabilir.
Misal
Aşağıdaki Maaş tablosunu düşünün.
Çalışan Hayır | Brüt | Kesinti | Net ödeme |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Aşağıda, Maaş tablosunda NetPay'in kümülatif toplamını veya cari toplamını bulmak için bir örnek verilmiştir. Kayıtlar ÇalışanNo'ya göre sıralanır ve kümülatif toplam NetPay sütununda hesaplanır.
SELECT
EmployeeNo, NetPay,
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS
UNBOUNDED PRECEDING) as TotalSalary
FROM Salary;
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.
EmployeeNo NetPay TotalSalary
----------- ----------- -----------
101 36000 36000
102 74000 110000
103 83000 193000
104 70000 263000
105 18000 281000
RANK
RANK işlevi, kayıtları sağlanan sütuna göre sıralar. RANK işlevi, sıralamaya göre döndürülen kayıtların sayısını da filtreleyebilir.
Sözdizimi
RANK işlevini kullanmak için genel sözdizimi aşağıdadır.
RANK() OVER
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
Misal
Aşağıdaki Çalışan tablosunu düşünün.
Çalışan Hayır | İsim | Soyadı | JoinedDate | Departman Kimliği | Doğum günü |
---|---|---|---|---|---|
101 | Mike | James | 27.3.2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25.4.2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21.3.2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Sorguyu takiben, çalışan tablosu kayıtlarını Katılma Tarihine göre sıralar ve Katılma Tarihindeki sıralamayı belirler.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(ORDER BY JoinedDate) as Seniority
FROM Employee;
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.
EmployeeNo JoinedDate Seniority
----------- ---------- -----------
101 2005-03-27 1
103 2007-03-21 2
102 2007-04-25 3
105 2008-01-04 4
104 2008-02-01 5
PARTITION BY yan tümcesi, verileri PARTITION BY yan tümcesinde tanımlanan sütunlara göre gruplandırır ve her grupta OLAP işlevini gerçekleştirir. Aşağıda PARTITION BY yan tümcesini kullanan sorguya bir örnek verilmiştir.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority
FROM Employee;
Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Her Departman için Derecenin sıfırlandığını görebilirsiniz.
EmployeeNo DepartmentNo JoinedDate Seniority
----------- ------------ ---------- -----------
101 1 2005-03-27 1
103 2 2007-03-21 1
102 2 2007-04-25 2
104 2 2008-02-01 3
105 3 2008-01-04 1