前言
聚合函数作为窗口函数
SELECT order_id,user_no,amount,avg(amount) OVER w AS avg_num,create_dateFROM order_tab WINDOW w AS (PARTITION BY user_noORDER BY create_date DESC ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING);

CURRENT ROW 边界是当前行,一般和其他范围关键字一起使用
UNBOUNDED PRECEDING 边界是分区中的第一行
UNBOUNDED FOLLOWING 边界是分区中的最后一行
expr PRECEDING 边界是当前行减去expr的值
expr FOLLOWING 边界是当前行加上expr的值
rows BETWEEN 1 PRECEDING AND 1 FOLLOWING 窗口范围是当前行、前一行、后一行一共三行记录。
rows UNBOUNDED FOLLOWING 窗口范围是当前行到分区中的最后一行。
rows BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 窗口范围是当前分区中所有行,等同于不写。
用途:在窗口中每条记录动态应用聚合函数(sum/avg/max/min/count),可以动态计算在指定的窗口内的各种聚合函数值。
应用场景:每个用户按照订单id,截止到当前的累计订单金额/平均订单金额/最大订单金额/最小订单金额/订单数是多少?
SELECT order_id,user_no,amount,create_date,sum(amount) OVER w as sum_num,avg(amount) OVER w as avg_num,max(amount) OVER w as max_num,min(amount) OVER w as min_num,count(amount) OVER w as count_numFROM order_tab WINDOW w AS (PARTITION BY user_noORDER BY order_id);

nth_value函数
nth_value(expr,n)
用途:返回窗口中第N个expr的值,expr可以是表达式,也可以是列名。
应用场景:每个用户订单中显示本用户金额排名第二和第三的订单金额。
SELECT order_id,user_no,amount,create_date,nth_value(amount,2) over w as second_amount,nth_value(amount,3) over w as third_amountFROM order_tab WINDOW w AS (PARTITION BY user_noORDER BY amount);

ntile函数
ntile(n)
用途:将分区中的有序数据分为n个桶,记录桶号。
应用场景:将每个用户的订单按照订单金额分成3组。
SELECT order_id,user_no,amount,create_date,ntile(3) over w as kFROM order_tab WINDOW w AS (PARTITION BY user_noORDER BY amount);

往期文章回顾

文章转载自数据分析从0到1,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




