【问题标题】:calculate N percentage of a column value by top n percentages of rows按行的前 n 个百分比计算列值的 N 个百分比
【发布时间】:2019-02-09 14:34:56
【问题描述】:

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

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

这是我的表格示例

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 用户除以所有产值之和。

【问题讨论】:

  • 如何定义“最活跃用户”?
  • 基于产值
  • edit您的问题并根据您的示例数据添加预期输出
  • 您的解释没有得到很好的解释。请添加预期结果并在您的解释中将这些方程式分开以更清楚。谢谢你

标签: postgresql sql-order-by percentage


【解决方案1】:

由于您没有向我们展示预期的输出,我刚刚创建了 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多