该ntile
功能在这里非常有用。我有一张桌子test_temp
:
select * from test_temp
score
integer
3
5
2
10
4
8
7
12
select score, ntile(4) over (order by score) as quartile from test_temp;
score quartile
integer integer
2 1
3 1
4 2
5 2
7 3
8 3
10 4
12 4
ntile(4) over (order by score)
按分数对列进行排序,将其分成四个偶数组(如果数字均分)并根据顺序分配组号。
因为我在这里有 8 个数字,它们代表第 0、第 12.5、第 25、第 37.5、第 50、第 62.5、第 75 和第 87.5 个百分位数。因此,如果我只取quartile
2 的结果,我将得到第 25 和第 37.5 个百分位数。
with ranked_test as (
select score, ntile(4) over (order by score) as quartile from temp_test
)
select min(score) from ranked_test
where quartile = 2
group by quartile;
返回4
, 8 列表中第三高的数字。
如果您有一个更大的表并使用ntile(100)
您过滤的列将是百分位数,您可以使用与上面相同的查询。