Sae*_*ati 3 sql-server t-sql rank
我正在尝试以 0-100 的比例找出查询的每个给定记录的位置。我这样使用PERCENT_RANK
排名功能:
select Term, Frequency, percent_rank() over (order by Frequency desc) * 100
from Words
Run Code Online (Sandbox Code Playgroud)
但是当我查看结果时,我看到的不是从 0 开始到 100 的列,而是从 0 开始到 37.xxxx 的列。
虽然BOL没有明确提到结果分布在 0-100 的范围内,但我对这个词的理解percent
让我使用了这个排名函数。
我在这里想念什么?
如果您有最低频率的联系,就会发生这种情况
下面显示了一个示例以及一个显示如何计算的计算列PERCENT_RANK
。
因为最高RANK
是3
降序排列时有 7 行。这 (rk -1)/(rn -1)
是(3-1)/(7 -1)
= 2/6
=33.3%
SELECT *,
RANK() OVER (order by Frequency desc) AS Rank1,
1e2 * (RANK() OVER (order by Frequency desc) - 1)/(count(*) over() - 1) AS Calc1,
100 * PERCENT_RANK() OVER (order by Frequency desc) AS Percent_Rank1,
RANK() OVER (order by Frequency asc) AS Rank2,
1e2 * (RANK() OVER (order by Frequency ASC) - 1)/(count(*) over() - 1) AS Calc2,
100 * PERCENT_RANK() OVER (order by Frequency ) AS Percent_Rank2
from (VALUES (1),(1),(1),(1),(1),(2),(3))V(Frequency )
Run Code Online (Sandbox Code Playgroud)
+-----------+-------+------------------+------------------+-------+------------------+------------------+
| Frequency | Rank1 | Calc1 | Percent_Rank1 | Rank2 | Calc2 | Percent_Rank2 |
+-----------+-------+------------------+------------------+-------+------------------+------------------+
| 1 | 3 | 33.3333333333333 | 33.3333333333333 | 1 | 0 | 0 |
| 1 | 3 | 33.3333333333333 | 33.3333333333333 | 1 | 0 | 0 |
| 1 | 3 | 33.3333333333333 | 33.3333333333333 | 1 | 0 | 0 |
| 1 | 3 | 33.3333333333333 | 33.3333333333333 | 1 | 0 | 0 |
| 1 | 3 | 33.3333333333333 | 33.3333333333333 | 1 | 0 | 0 |
| 2 | 2 | 16.6666666666667 | 16.6666666666667 | 6 | 83.3333333333333 | 83.3333333333333 |
| 3 | 1 | 0 | 0 | 7 | 100 | 100 |
+-----------+-------+------------------+------------------+-------+------------------+------------------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1482 次 |
最近记录: |