Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

窗口函数

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

窗口函数计算与投影行相关的数据子集(窗口)上的聚合或排名值。

这有许多强大的应用,例如,累计总和或滑动平均值

SELECT
  id,

  -- A sliding average over 3 rows, including the current row
  avg(amount) OVER (ORDER BY id ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
  amount,

  -- A cumulative sum over all previous rows
  sum(amount) OVER (ORDER BY id)
FROM (VALUES
  (1, 10.0),
  (2, 15.0),
  (3, 20.0),
  (4, 25.0),
  (5, 30.0),
  (6, 35.0)
) AS t (id, amount)

结果是

+----+-----------------+--------+-----------------+
| id | sliding average | amount |  cumulative sum |
+----+-----------------+--------+-----------------+
|  1 |  12.5           |   10.0 | --\        10.0 |
|  2 |  15.0           |   15.0 |   |        25.0 |
|  3 |  20.0           |   20.0 |   |        45.0 |
|  4 |  25.0       /-- |   25.0 |   |        70.0 |
|  5 |  30.0 = AVG +   |   30.0 | --+ SUM = 100.0 |
|  6 |  32.5       \-- |   35.0 |           135.0 |
+----+-----------------+--------+-----------------+

如图所示,聚合发生在相对于计算行的窗口上

  • AVG 示例中,窗口随行移动,始终查找后面的 1 行和前面的 1 行(如果适用),跨越 1-3 行之间的任何内容,并计算这些行的平均值,形成滑动平均值。
  • SUM 示例中,窗口始终从数据集的开头开始,并对直到当前行的所有行求和,形成累积总和。

这个强大功能的详细工作原理将在接下来的页面中说明,其中各种子句,包括 PARTITION BY 子句ORDER BY 子句frame 子句被解释。

目录

3.11.26.1.
PARTITION BY
3.11.26.2.
ORDER BY
3.11.26.3.
ROWS,RANGE,GROUPS (frame 子句)
3.11.26.4.
EXCLUDE
3.11.26.5.
NULL 处理
3.11.26.6.
FROM FIRST,FROM LAST
3.11.26.7.
嵌套聚合函数
3.11.26.8.
窗口聚合
3.11.26.9.
窗口有序聚合
3.11.26.10.
ROW_NUMBER
3.11.26.11.
RANK
3.11.26.12.
DENSE_RANK
3.11.26.13.
PERCENT_RANK
3.11.26.14.
CUME_DIST
3.11.26.15.
NTILE
3.11.26.16.
LEAD
3.11.26.17.
LAG
3.11.26.18.
FIRST_VALUE
3.11.26.19.
LAST_VALUE
3.11.26.20.
NTH_VALUE

previous : next

反馈

您对此页面有任何反馈吗?我们很乐意听到您的声音!

The jOOQ Logo