MySQL计算组中的百分比_by/where条件



我使用的是MySQL 5.7,希望计算用户在特定时间内编辑帖子的百分比。

通常,我会将这作为两个单独的查询来完成,但我很确定可以用一个查询来完成。我有一组编辑过帖子的用户,他们想了解每个用户编辑帖子的数量。像这样:

select count(*) as edited_post_count, 
user_id 
from posts 
where edited_at between '2022-05-31' and '2022-06-06' 
group by user_id 
order by edited_post_count desc;

现在,我想计算一下他们有史以来的帖子总数,可以说80条帖子中有10条是在这段时间编辑的。如果他们没有编辑,edited_at将为null(yes应为last_edited_at(。如何将其添加到此查询?

帖子

user_id
id主体编辑
1"什么">12022-06-01
2";永远">1
3";更多">22022-06-03

您可以使用CONCAT输出按日期范围内的单个用户分组的帖子的COUNT,并与子查询连接,该子查询获取未指定edited_at IS NOT NULL和日期范围的帖子总数。

select 
count(*) as edited_post_count,
CONCAT(count(*), ' of ',  (SELECT COUNT(*) from posts a where a.user_id = b.user_id and edited_at is not null), ' posts were edited during this time.') as total_post_count,
user_id 
from posts b 
where edited_at between '2022-05-31' and '2022-06-06' 
group by user_id 
order by edited_post_count desc;

示例结果:

edited_post_count
3在此期间编辑了5篇帖子中的3篇1
2在此期间编辑了3篇帖子中的2篇2

最新更新