📜  Teradata OLAP函数

📅  最后修改于: 2021-01-11 11:41:19             🧑  作者: Mango

Teradata OLAP功能

OLAP函数类似于聚合函数,只不过聚合函数将仅返回一个值。相反,OLAP函数将提供除聚合之外的各个行。

OLAP功能内置于Teradata数据库中,以提供数据挖掘功能和趋势分析。

这些功能提供了使用标准聚合不可用的处理。 OLAP函数给出其操作结果并显示该函数使用的详细数据值。

详细行数据显示为答案集的一部分,因为输出为行格式,而不是诸如WITH的报告格式。

OLAP函数可以在所有表或视图上执行,并与INSERT / SELECT一起用于填充表。最重要的区别是,与WITH不同,这些函数可以在Queryman中使用。

句法

以下是OLAP函数的语法。

 OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)

注意:聚合函数可以是SUM,COUNT,MIN,MAX和AVG。

考虑以下雇员的工资表。

Emp_Id Gross Deduction NetPay
202001 40,000 4,000 36,000
202002 80,000 6,000 74,000
202003 90,000 7,000 83,000
202004 75,000 5,000 70,000

以下是在Salary表上查找NetPay的累计金额或运行总额的示例。

记录按Emp_Id排序,并且累计总和在NetPay列上计算。

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

执行完上述查询后,将产生以下输出。

   Emp_Id           NetPay     TotalSalary 
   202001           36000        36000 
   202002           74000        110000 
   202003           83000        193000 
   202004           70000        263000 

量子函数

QUANTILE函数用于将行划分为几个分区,每个分区中的行数大致相同。百分位数是企业中最常用的QUANTILE。

默认情况下,QUANTILE列和QUANTILE值本身都将以升序输出。

在某些情况下,可以使用ORDER BY子句对输出进行重新排序以进行显示。在这里,输出的顺序不会改变输出的含义,这与求和不同,这些求和是将值加在一起,并且所有值都必须以正确的顺序出现。

句法

以下是QUANTILE函数的语法。

SELECT QUANTILE (,  , [DESC | ASC])
FROM 
[QUALIFY QUANTILE () {< | > | = | <= | >=} ];

RANK功能

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

RANK函数允许根据高阶或低阶对一列进行评估并与所有其他行进行比较以创建输出集。

默认情况下,该顺序将按排名列的降序进行排序,这与降序的排名相关。

RANK函数的输出是该列中的最高或最低数据值,具体取决于请求的排序。

句法

以下是使用RANK函数的语法。

SELECT RANK(  [DESC | ASC] )
FROM 
[GROUP BY , [ ] ] [{ ASC | DESC } ]
[QUALIFY RANK() {< | <=}  ];

考虑下面的雇员表。

Emp_Id First_Name Last_Name JoinedDate Department_No BirthDate
202001 Mike Richard 3/27/2008 1 1/5/1980
202002 Robert Williams 4/25/2013 1 3/5/1983
202003 Peter Collin 3/21/2010 1 4/1/1983
202004 Alexa Stuart 1/2/2017 2 11/6/1984
202005 Robert Peterson 1/4/2015 2 12/1/1984

以下查询按“加入日期”对employee表的记录进行排序,并在“加入日期”上分配排名。

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

执行上述查询后,将产生以下输出。

Emp_Id        JoinedDate       Seniority  
202001        03/27/2008         1 
202003        03/21/2010         2 
202002        04/25/2013         3 
202005        01/04/2015         4 
202004        01/02/2017         5 

PARTITION BY子句按PARTITION BY子句中定义的列对数据进行分组,并在每个组中执行OLAP函数。以下是使用PARTITION BY子句的查询示例。

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

执行上述查询后,将产生以下输出。我们可以看到,每个部门的排名都已重置。

Emp_Id         DepartmentNo       JoinedDate         Seniority  
202001           1                03/27/2008              1 
202003           1                03/21/2010              2 
202002           1                04/25/2013              3 
202005           2                01/04/2015              4 
202004           2                01/02/2017              5