如何在postgresql中获得前99%的值?

uujelgoq  于 2022-11-23  发布在  PostgreSQL
关注(0)|答案(2)|浏览(195)

看起来与How to get the top 10 values in postgresql?相似,但又有很大不同。
我们将设置类似于以下问题:
我有一个postgresql表:Scores(score integer) .
如何才能获得最高的99%的分数呢?我们不能说我们事先知道有多少行,所以我们不能对整数技巧使用同样的限制。SQL Server有一个简单的SELECT TOP语法--在postgresql世界里有没有类似的简单语法?

ercv8c1e

ercv8c1e1#

这应该可以通过percent_rank()实现

select score
from (
  select score, percent_rank() over (order by score desc) as pct_rank
  from scores
) t
where pct_rank <= 0.99
toe95027

toe950272#

可以使用ntile函数将行划分为百分点,然后选择tile〉99的行
例如:

-- following query generates 1000 rows with random 
-- scores and selects the 99th percentile using the ntile function.
-- because the chance of the same random value appearing twice is extremely
-- small, the result should in most cases yield 10 rows.
with scores as (
  select
    id
  , random() score
  from generate_series(1, 1000) id
 )
, percentiles AS (
  select 
    *
  , ntile(100) over (order by score) tile
  from scores
)
select 
  id
, score
from percentiles 
where tile > 99

相关问题