我使用的是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(。如何将其添加到此查询?
帖子
id | 主体 | user_id编辑 | |
---|---|---|---|
1 | "什么"> | 1 | 2022-06-01 |
2 | ";永远"> | 1 | 空 |
3 | ";更多"> | 2 | 2022-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 |