可用版本:Dev (3.21) | 最新版 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

嵌套聚合函数

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

SQL 的逻辑操作顺序中,普通的聚合函数在逻辑上会在窗口函数之前进行评估。

这意味着在计算窗口函数时,聚合函数的值已经确定。 这允许一些令人印象深刻的表达式,例如

SELECT
  AUTHOR_ID,
  COUNT(*) AS BOOKS,
  SUM(COUNT(*)) OVER () AS ALL_BOOKS
FROM
  BOOK
GROUP BY AUTHOR_ID
create.select(
         BOOK.AUTHOR_ID,
         count().as("books"),
         sum(count()).over().as("all_books"))
     .from(BOOK)
     .groupBy(BOOK.AUTHOR_ID)
     .fetch();

产生

+-----------+-------+-----------+
| author_id | books | all_books |
+-----------+-------+-----------+
|         1 |     2 |         4 |
|         2 |     2 |         4 |
+-----------+-------+-----------+

在这个例子中,COUNT(*) 的聚合值可以使用 SUM(COUNT(*)) OVER (...) 再次进行聚合。

然而,就像聚合函数不能嵌套在聚合函数中一样,窗口函数也不能嵌套在窗口函数中。

反馈

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

The jOOQ Logo