是否可以为单个记录获取PERCENT_RANK,但相对于整个表?

问题描述 投票:1回答:2

我希望单个记录的PERCENT_RANK值,但与整个表格有关。这可能吗?

我见过的例子是这样的:

SELECT Name, Salary
  PERCENT_RANK() OVER (ORDER BY Salary)
  FROM Employees

请注意,它正在计算返回记录集的百分位数。如果你要归还整张桌子,那太好了。但是如果你要返回一个子集,那么你只需要获取返回记录集中一行的百分位数,当我想要它用于整个表时(对于一组我不返回的行)。

医生说这个:

计算一组行中行的相对排名

这不是我想要的。基本上,我想这样做(注意:这是非工作代码):

SELECT Name, Salary
  PERCENT_RANK() OVER (SELECT * FROM Employees ORDER BY Salary)
  FROM Employees

所以,实际上,我想说,“与整张桌子相比,给我这个记录的百分位数。”

在上面的例子中,它是同一个因为我检索整个表。但我不能拉一个单一的记录,并获得整个表的百分位数。

SELECT Name, Salary
  PERCENT_RANK() OVER (ORDER BY Salary)
  FROM Employees
  WHERE id = 1234

那一条记录将永远是1.000,因为它返回的所有行的百分位数都是100%,这只是一个。

sql-server tsql statistics percentile
2个回答
1
投票
SELECT e.Name, e.Salary, r.Employee_Rank
FROM Employees e
    JOIN (
        SELECT id,
        PERCENT_RANK() OVER (ORDER BY Salary) AS Employee_Rank
        FROM Employees
    ) r ON r.Id = e.Id
WHERE e.id = 1234

0
投票

是的,您需要使用子查询或CTE:

WITH CTE AS
    (SELECT id,
            [Name],
            Salary,
            PERCENT_RANK() OVER (ORDER BY Salary) AS PR
     FROM Employees)
SELECT [Name],
       Salary,
       PR
FROM CTE
WHERE id = 1234;
© www.soinside.com 2019 - 2024. All rights reserved.