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