Teradata教程

Teradata OLAP 函数

OLAP 函数类似于聚合函数,不同之处在于聚合函数只返回一个值,而 OLAP 函数除了聚合之外还提供单独的行。

语法

以下是 OLAP 函数的一般语法。
<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING) 
聚合函数可以是 SUM、COUNT、MAX、MIN、AVG。

示例

考虑以下薪资表。
EmployeeNo 毛额 演绎 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
以下是在 Salary 表上查找 NetPay 的累计总和或运行总计的示例。记录按 EmployeeNo 排序,并在 NetPay 列上计算累计金额。
SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;
执行上述查询时,会产生以下输出。
EmployeeNo     NetPay     TotalSalary 
---------------------------------
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000 

排名

RANK 函数根据提供的列对记录进行排序。 RANK 函数还可以根据排名过滤返回的记录数。

语法

以下是使用 RANK 函数的通用语法。
RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

示例

考虑以下员工表。
EmployeeNo 名字 姓氏 JoinedDate 部门ID 出生日期
101 迈克 詹姆斯 2005/3/27 1 1/5/1980
102 罗伯特 威廉姆斯 4/25/2007 2 3/5/1983
103 彼得 保罗 3/21/2007 2 4/1/1983
104 亚历克斯 斯图尔特 2/1/2008 2 11/6/1984
105 罗伯特 詹姆斯 1/4/2008 3 12/1/1984
以下查询按加入日期对员工表的记录进行排序,并按加入日期分配排名。
SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;
执行上述查询时,会产生以下输出。
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 子句按 PARTITION BY 子句中定义的列对数据进行分组,并在每个组内执行 OLAP 功能。以下是使用 PARTITION BY 子句的查询示例。
SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;
执行上述查询时,会产生以下输出。可以看到每个部门的排名都被重置了。
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 
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4