嵌套聚合函数
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
在 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 (...)
再次进行聚合。
然而,就像聚合函数不能嵌套在聚合函数中一样,窗口函数也不能嵌套在窗口函数中。
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的意见!