Presto 的窗口函数有哪些?

推荐答案

Presto 支持多种窗口函数,主要包括以下几类:

  1. 聚合窗口函数

    • SUM(): 计算窗口内某列的总和。
    • AVG(): 计算窗口内某列的平均值。
    • COUNT(): 计算窗口内某列的行数。
    • MIN(): 计算窗口内某列的最小值。
    • MAX(): 计算窗口内某列的最大值。
  2. 排名窗口函数

    • ROW_NUMBER(): 为窗口内的每一行分配一个唯一的行号。
    • RANK(): 为窗口内的每一行分配一个排名,相同值的行会有相同的排名,后续排名会跳过。
    • DENSE_RANK(): 为窗口内的每一行分配一个排名,相同值的行会有相同的排名,但后续排名不会跳过。
    • NTILE(n): 将窗口内的行分成 n 个桶,并为每一行分配一个桶号。
  3. 分析窗口函数

    • FIRST_VALUE(): 返回窗口内某列的第一个值。
    • LAST_VALUE(): 返回窗口内某列的最后一个值。
    • LAG(): 返回窗口内某列的前一个值。
    • LEAD(): 返回窗口内某列的后一个值。
  4. 累积窗口函数

    • CUME_DIST(): 计算窗口内某列的累积分布。
    • PERCENT_RANK(): 计算窗口内某列的百分比排名。

本题详细解读

窗口函数的基本概念

窗口函数(Window Function)是一种在 SQL 查询中用于对一组行进行计算的函数。与普通的聚合函数不同,窗口函数不会将多行合并为一行,而是为每一行返回一个值。窗口函数通常与 OVER 子句一起使用,OVER 子句定义了窗口的范围。

窗口函数的语法

窗口函数的基本语法如下:

  • PARTITION BY: 将数据分成多个分区,窗口函数在每个分区内独立计算。
  • ORDER BY: 定义窗口内的排序顺序。
  • frame_clause: 定义窗口的框架,即计算的范围。常见的框架包括 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING

窗口函数的应用场景

窗口函数在数据分析中非常有用,常见的应用场景包括:

  • 排名和分位数计算:如 ROW_NUMBER()RANK()DENSE_RANK()NTILE()
  • 累积计算:如 SUM()AVG()CUME_DIST()
  • 前后值比较:如 LAG()LEAD()
  • 首尾值获取:如 FIRST_VALUE()LAST_VALUE()

示例

以下是一个使用窗口函数的示例,计算每个部门的员工工资排名:

在这个示例中,RANK() 函数为每个部门的员工按工资从高到低进行排名,PARTITION BY department 表示在每个部门内独立计算排名。

纠错
反馈