Postgresql 按行的前N个百分比计算列值的N个百分比

Postgresql 按行的前N个百分比计算列值的N个百分比,postgresql,sql-order-by,percentage,Postgresql,Sql Order By,Percentage,我有两个专栏。一个是用户ID,另一个是每个用户的生产值。 我想知道前10%最活跃用户的生产百分比 我试过使用“导入”,但由于我不知道它是如何工作的,所以无法得到正确的结果 这是我桌子的样品 userid | production 42539973@N00 | 6572 13407304@N05 | 6765 50780708@N02 | 6958 92607898@N00 | 7826 52996072@N04 | 7889 57868312@N00 | 8226 90484572@

我有两个专栏。一个是用户ID,另一个是每个用户的生产值。 我想知道前10%最活跃用户的生产百分比

我试过使用“导入”,但由于我不知道它是如何工作的,所以无法得到正确的结果

这是我桌子的样品

userid       | production
42539973@N00 | 6572
13407304@N05 | 6765
50780708@N02 | 6958
92607898@N00 | 7826
52996072@N04 | 7889
57868312@N00 | 8226
90484572@N00 | 8444
26650236@N07 | 8802
26650236@N08 | 88802
26650236@N09 | 98802

例如,10%的用户为1,如果我们根据“生产”值订购,则该用户是最后一个用户,该用户生产了整个生产的近39%,这是由10%od用户的生产量之和除以所有生产值之和计算得出的。

因为您没有向我们显示预期产量,我刚刚创建了SQL,用于过滤10%的最有效率的用户,用他们的产量之和除以所有用户的产量

 with cnt as (select round(count(1)*0.1) no_users, sum(production) production_sum from your_table),
      users as (select userid, distance production, 
                     sum(production) over (order by production desc rows between unbounded preceding and 0 FOLLOWING) production_10,
                     row_number() over (order by production desc) rnk,
                     no_users,
                     production_sum
                from your_table, cnt)


 select no_users, 
        production_10, 
        production_sum, 
        round(production_10/production_sum*100,2) prc_production  
   from users 
  where no_users=rnk

“最活跃用户”是如何定义的?基于生产值请根据您的问题并根据您的样本数据添加预期的输出您的解释没有很好地解释。请添加预期结果,并在您的解释中将这些方程分开,以便更清楚。谢谢你