Teradata - Chức năng OLAP

Các hàm OLAP tương tự như các hàm tổng hợp ngoại trừ việc các hàm tổng hợp sẽ chỉ trả về một giá trị trong khi hàm OLAP sẽ cung cấp các hàng riêng lẻ ngoài các tổng hợp.

Cú pháp

Sau đây là cú pháp chung của hàm OLAP.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)

Các hàm tổng hợp có thể là SUM, COUNT, MAX, MIN, AVG.

Thí dụ

Hãy xem xét bảng lương sau đây.

Nhân viên Không Tổng Khấu trừ NetPay
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

Sau đây là một ví dụ để tìm tổng tích lũy hoặc tổng số đang chạy của NetPay trên bảng Lương. Các bản ghi được sắp xếp theo EmployeeNo và tổng tích lũy được tính trên cột NetPay.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000

CẤP

Hàm RANK sắp xếp thứ tự các bản ghi dựa trên cột được cung cấp. Hàm RANK cũng có thể lọc số lượng bản ghi được trả về dựa trên thứ hạng.

Cú pháp

Sau đây là cú pháp chung để sử dụng hàm RANK.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

Thí dụ

Hãy xem xét bảng Nhân viên sau đây.

Nhân viên Không Tên đầu tiên LastName Ngày tham gia DepartmentID Ngày sinh
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

Truy vấn sau sắp xếp các bản ghi của bảng nhân viên theo Ngày tham gia và chỉ định xếp hạng vào Ngày tham gia.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.

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

Mệnh đề PARTITION BY nhóm dữ liệu theo các cột được xác định trong mệnh đề PARTITION BY và thực hiện chức năng OLAP trong mỗi nhóm. Sau đây là một ví dụ về truy vấn sử dụng mệnh đề PARTITION BY.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Bạn có thể thấy rằng Xếp hạng được đặt lại cho từng Bộ phận.

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