分析函数_PERCENT_RANK -- SQL Server 2012 & Hive

刚才已经介绍了 CUME_DIST 在 SQL Server 2012 (Hive)中的应用。因为在 Hive 中的语法跟 Server2012 中相同,所以我这里就不过多叙述 Hive 中使用的细节了。
PERCENT_RANK() 函数会返回当前查询结果集和分区的一个相对值。如果你希望进一步了解该函数,可以参考: https://en.wikipedia.org/wiki/Percentile
它的计算方式如下:(分组内当前行的 Rank 值-1) / (分组内总行数 - 1)  
                                                                    

USE AdventureWorks
GO
SELECT SalesOrderID, OrderQty,
RANK() OVER(ORDER BY SalesOrderID) Rnk,
PERCENT_RANK() OVER(ORDER BY SalesOrderID) AS PctDist
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
ORDER BY PctDist DESC
GO

执行上述查询后,返回以下结果:

percentrank SQL SERVER   Introduction to PERCENT RANK()   Analytic Functions Introduced in SQL Server 2012

从上述可与看到,对PERCENT_RANK()函数的查询中也包含了 Rank() 函数,之所以这样写,是希望通过 Rank 函数来反应PERCENT_RANK()函数具体功能。


接下来让我们在查询中加入分区,查询代码如下:

USE AdventureWorks
GO
SELECT SalesOrderID, OrderQty, ProductID,
RANK() OVER(PARTITION BY SalesOrderID ORDER BY ProductID ) Rnk,
PERCENT_RANK() OVER(PARTITION BY SalesOrderID ORDER BY ProductID ) AS PctDist
FROM Sales.SalesOrderDetail s
WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
--ORDER BY PctDist DESC
GO

如下图所示,我们会发现 PERCENT_RANK() 函数其实就是对具有相同 Order By 字段在其所在的 Partition 组中出现的概率。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值