繁体   English   中英

T-SQL:用于计算第N个百分位数的聚合函数

[英]T-SQL: aggregate function for calculating Nth percentile

我正在尝试计算表中单个列中所有值的第N个百分位数。 我想要的只是一个标量的聚合值,该值的N%以下。 例如,如果表有100行,其中该值与行索引相同,再加上一个(连续1到100),那么我希望该值告诉我95%的值低于95。

PERCENTILE_CONT分析函数看起来与我想要的最接近。 但是,如果我尝试这样使用它:

SELECT PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ValueColumn) OVER () AS P95

我在表中每行得到一行,所有值都相同。 我可以使用TOP 1来给我其中的一行,但是现在我做了另外的表扫描。

我不尝试创建结果表的wizbang表,该表由原始表中的其他列划分。 我只想要一个合计的标量值。

编辑:我已经能够使用PERCENTILE_CONT在查询中有WHERE子句。 例如:

DECLARE @P95 INT

SELECT TOP 1 @P95 = (PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ValueColumn) OVER ())
FROM ExampleTable
WHERE LOWER(Color) = 'blue'

SELECT @P95

包含WHERE子句的结果与没有它的情况不同。

据我所知,您将需要在此处进行子查询。 例如,要查找严格低于95%的记录数,我们可以尝试:

WITH cte AS (
    SELECT ValueColumn,
        PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY ValueColumn) OVER () AS P95
    FROM yourTable
)

SELECT COUNT(*)
FROM cte
WHERE ValueColumn < P95;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM