BI-SQL丨开窗函数(二)

开窗函数(二)

之前的文章里,白茶曾经描述过关于开窗函数的内容,本期我们来继续这个话题。

通过之前的介绍,相信大家也知道了,我们经常使用的开窗函数除了排名函数以外,还有聚合函数。

语法

<开窗函数> over (partition by <用于分组的列> order by <用于排序的列>)

本期呢,会给大家展示聚合函数在开窗函数中的应用。

聚合函数:sum,avg,count,max,min。

使用实例

案例数据:

在白茶本机的数据库中存在名为“CaseData”的数据库。"Dim_Product"产品表。

例子1:使用Sum函数,对Price进行聚合,按照ProductGroup进行分组。

SELECT ProductGroup,ProductName,SUM(price) OVER (PARTITION BY ProductGroup ORDER BY price) AS Sum_Price
FROM Dim_Product

结果如下:

从结果上我们可以看出,这段代码按照ProductGroup的分组方式,遵循Price从小到大的顺序进行累积。

某些场合,我们可以用来计算累计求和,例如:YTD。

如果我们直接使用Sum的话,结果是什么样?我们看一下。

代码如下:

SELECT ProductGroup,ProductName,SUM(price) AS Sum_Price
FROM Dim_Product
GROUP BY ProductName,ProductGroup

结果如下:

数据对比原Price其实是没有变化的,如果我们将ProductName去掉,则会按照Group进行汇总。

例子2:使用Avg函数,对Price进行聚合,按照ProductGroup进行分组。

SELECT *,AVG(price) OVER (PARTITION BY ProductGroup ORDER BY price) AS Avg_Price
FROM Dim_Product

结果如下:

从结果上我们可以看出,这段代码按照ProductGroup的分组方式,进行平均值计算。

如果没明白的话,白茶换个说法相信小伙伴不会陌生:DAX中的移动平均。

例子3:使用Count函数,对Price进行聚合,按照ProductGroup进行分组。

SELECT *,COUNT(price) OVER (PARTITION BY ProductGroup ORDER BY price) AS Count_Price
FROM Dim_Product

结果如下:

从结果上我们可以看出,这段代码按照ProductGroup的分组方式,进行行数计算。

当然,这个结果与Rank函数有点类似,区别在于Rank函数不保留后面的排位序数,而Count是不保留前面的排位序数。

Rank:1、2、3、3、5。

Count:1、2、4、4、5。

例子4:使用Max函数,对Price进行聚合,按照ProductGroup进行分组。

SELECT *,MAX(price) OVER (PARTITION BY ProductGroup ORDER BY price) AS Max_Price
FROM Dim_Product

结果如下:

可能看到这里小伙伴会有疑惑,这不是没变化么?

别急,我们与例子5一起说。

例子5:使用Min函数,对Price进行聚合,按照ProductGroup进行分组。

SELECT *,MIN(price) OVER (PARTITION BY ProductGroup ORDER BY price) AS Min_Price
FROM Dim_Product

结果如下:

Max函数在开窗函数使用中,会进行迭代比较取最大值。因为本身就是按照Price进行排序的,所以大家看不出来差距。

Min函数是迭代取最小值,按照Price升序,结果对比非常明细。

总结:

函数名称开窗适用场景
SUM适用于累计求和,例如:YTD
AVG适用于移动平均的计算
COUNT适用于排名,注意与Rank的区别
MAX组内取最大值
MIN组内取最小值

这里是白茶,一个PowerBI的初学者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值