Teradata OLAP 函数

17 Mar 2025 | 4 分钟阅读

OLAP 函数类似于聚合函数,除了聚合函数只会返回一个值。相反,OLAP 函数除了聚合值之外,还会提供各个行。

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

这些函数提供了使用标准聚合无法实现的处理。OLAP 函数提供其操作的结果并显示在函数中使用的数据值的详细信息。

由于输出以行格式而非报告格式(例如 WITH)显示,因此详细的行数据将作为答案集的一部分显示。

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

语法

以下是 OLAP 函数的语法。

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

示例

考虑以下员工的 Salary 表。

员工 ID总收入Deduction (扣除额)NetPay (实付工资)
20200140,0004,00036,000
20200280,0006,00074,000
20200390,0007,00083,000
20200475,0005,00070,000

以下是一个查找 Salary 表中 NetPay 的累积总和或运行总数的示例。

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

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

QUANTILE 函数

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

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

在某些情况下,ORDER BY 子句可用于重新排序输出以供显示。这里,输出的顺序不会改变输出的含义,不像求和,其中值被加在一起,并且所有值都需要以正确的顺序出现。

语法

以下是 QUANTILE 函数的语法。

RANK 函数

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

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

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

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

语法

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

示例

考虑以下员工表。

员工 ID名字姓氏入职日期部门编号出生日期
202001迈克Richard3/27/200811/5/1980
202002Robert威廉姆斯4/25/201313/5/1983
202003彼得科林3/21/201014/1/1983
202004Alexa斯图尔特1/2/2017211/6/1984
202005Robert彼得森1/4/2015212/1/1984

以下查询按入职日期对员工表的记录进行排序,并在入职日期上分配排名。

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

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

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