SQL之开窗函数二 1.使用开窗函数求移动平局值 大家看股票的时候,经常会看到K线图,里面经常用到的5日、30日移动平均趋势图,那如何使用窗口函数求移动平均值呢
(1)现有一张表Stock,求5日 移动平均值 原表数据结构如下:
查询5日平均价格语句: select stockname ,TradingDate ,price ,avg(price) over(partition by stockname order by tradingdate rows between 4 preceding and current row) as fievedaysavgprice from Stock 结果如下:
语法总结: sum(…A…) over(partition by …B… order by …C… rows between … D1… and …D2..) avg(…A…) over(partition by …B… order by …C… rows between … D1… and …D2..) A:需要被加工的字段名称 B:分组的字段名称 C:排序的字段名称 D:计算的行数范围 rows between unbounded prceding and current row –包括本行和之前所有的行 rows between current row and unbounded following –包括本行和之后所有的行 rows between 3 preceding and current row –包括本行以内和前三行 rows between 3 preceding and 1 following –从前三行到下一行 (5行) 2.分组排序窗口函数实际运用 ntile (n)over(……) ntile(n) over(partition by …A… order by …B…) n:切片的片数 A:分组的字段名称 B:排序的字段名称 ntile(n) :用于将分组数据按照顺序切分成n片,返回当前切片值 如果切片不均匀,默认增加到第一个切片的分布 例子:选出2021年退款金额排名前20%的用户 原数据表:user_refund
查询退款20%的语句:具体分析就是按照用户退款金额总数降序分成5组,取第一组的数据 select * from ( select [user_name] ,sum(refund_amount) as refund_amount ,ntile(5) over(order by sum(refund_amount) desc) as level from user_refund where year(refund_time)=2021 group by [user_name] ) as a where a.level=1
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/87150.html