可能数据如下:
user RO retweetID
jim o (null)
jim o (null)
jim r r8
bill o (null)
bill r r3
fred o (null)
fred r r6
fred r r6
fred r r1
我想计算o,r和avgercount(r的总数/不同r的数量)所以我应该得到:
user ocount rcount avgercount
jim 2 1 1
bill 1 1 1
fred 1 3 1.5
在qazxsw poi,我一开始就陷入困境。任何帮助非常感谢。
EDIt:澄清:avgercount =(r的总数/不同r的数量)对于Fred,他有三个转推:r6,r6,r1但只有两个是不同的,avgercount = 3/2。
只需使用条件聚合来获取基数:
SQLFiddle
这计算“r”的平均值。目前还不清楚你的问题是什么计算。
在MySQL中,这可以缩短为:
select user,
sum(case when ro = 'o' then 1 else 0 end) as o_cnt,
sum(case when ro = 'r' then 1 else 0 end) as r_cnt,
avg(case when ro = 'r' then 1.0 else 0.0 end) as avg_r,
sum(case when ro = 'r' then 1.0 else 0 end) / count(distinct case when ro = 'r' then retweetID end) as retweet_ratio
from t
group by user;