Teradata - Fungsi OLAP
Fungsi OLAP mirip dengan fungsi agregat kecuali bahwa fungsi agregat hanya akan mengembalikan satu nilai sedangkan fungsi OLAP akan menyediakan baris individual selain agregat.
Sintaksis
Berikut ini adalah sintaks umum fungsi OLAP.
<aggregate function> OVER
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
Fungsi agregasi dapat berupa SUM, COUNT, MAX, MIN, AVG.
Contoh
Perhatikan tabel Gaji berikut.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Berikut adalah contoh untuk menemukan jumlah kumulatif atau menjalankan total NetPay pada tabel Gaji. Catatan diurutkan berdasarkan EmployeeNo dan jumlah kumulatif dihitung pada kolom NetPay.
SELECT
EmployeeNo, NetPay,
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS
UNBOUNDED PRECEDING) as TotalSalary
FROM Salary;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
EmployeeNo NetPay TotalSalary
----------- ----------- -----------
101 36000 36000
102 74000 110000
103 83000 193000
104 70000 263000
105 18000 281000
PANGKAT
Fungsi RANK mengurutkan rekaman berdasarkan kolom yang disediakan. Fungsi RANK juga dapat memfilter jumlah record yang dikembalikan berdasarkan ranking.
Sintaksis
Berikut ini adalah sintaks umum untuk menggunakan fungsi RANK.
RANK() OVER
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartmentID | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
Kueri berikut mengurutkan rekaman tabel karyawan berdasarkan Tanggal Bergabung dan menetapkan peringkat pada Tanggal Bergabung.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(ORDER BY JoinedDate) as Seniority
FROM Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
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
Klausa PARTITION BY mengelompokkan data menurut kolom yang ditentukan dalam klausa PARTITION BY dan menjalankan fungsi OLAP dalam setiap grup. Berikut ini adalah contoh dari query yang menggunakan klausa PARTITION BY.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority
FROM Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Anda dapat melihat bahwa Peringkat diatur ulang untuk setiap Departemen.
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