我可以在SQL中组合两个级别的计数吗?

问题描述 投票:1回答:1

可能数据如下:

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。

mysql sql
1个回答
3
投票

只需使用条件聚合来获取基数:

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;
© www.soinside.com 2019 - 2024. All rights reserved.