根据行的前 n 个百分比计算列值的 N 个百分比
calculate N percentage of a column value by top n percentages of rows
我有两列。一个是 user_ids,另一个是每个用户的生产价值。
我想知道前 10% 的最活跃用户的生产百分比。
我尝试过 Lead over,但由于我不知道它是如何工作的,所以我无法得到正确的结果。
这是我的示例 table
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,如果我们根据 "production" 值对他们进行排序,则为最后一个用户,并且该用户生产了将近 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
我有两列。一个是 user_ids,另一个是每个用户的生产价值。 我想知道前 10% 的最活跃用户的生产百分比。
我尝试过 Lead over,但由于我不知道它是如何工作的,所以我无法得到正确的结果。
这是我的示例 table
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,如果我们根据 "production" 值对他们进行排序,则为最后一个用户,并且该用户生产了将近 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