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