是否可以针对单个记录但相对于整个表获得PERCENT_RANK?

时间:2019-04-24 13:08:50

标签: sql-server tsql statistics percentile

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

我所看到的例子是这样的:

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

请注意,它正在计算返回的记录集的百分位数。如果您要返回整个表,那太好了。但是,如果要返回一个子集,那么当我想要整个表(对于一组行我< em>不返回)。

医生说:

  

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

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

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%百分位。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;