MySQL:统计用户名下仅含一次活动的任务数量
解决用户单次活动任务统计问题
嘿,针对你这个需求,我来一步步拆解并给出具体的实现方案:
核心思路
我们要统计的是每个用户仅操作过一次的任务数量,得先定位到每个用户对每个任务的操作次数,再筛选出次数为1的任务,最后按用户维度统计这类任务的总数。
具体SQL实现
假设你的activities表中,任务唯一编码字段为task_code,用户ID字段为user_id,可以用以下SQL语句实现:
SELECT user_id, COUNT(*) AS `Count Jobs with one activity` FROM ( -- 第一步:筛选出用户仅操作过一次的任务 SELECT user_id, task_code FROM activities GROUP BY user_id, task_code HAVING COUNT(*) = 1 ) AS user_single_task_list GROUP BY user_id;
代码逻辑解释
- 内层子查询:先按
user_id和task_code分组,计算每个用户对每个任务的操作次数,再通过HAVING COUNT(*) = 1筛选出那些用户只操作过一次的任务记录。 - 外层查询:将内层筛选出的结果按
user_id再次分组,用COUNT(*)统计每个用户拥有的这类任务数量,最终输出你需要的格式。
示例效果展示
如果activities表有如下测试数据:
| user_id | task_code |
|---|---|
| 1 | T001 |
| 1 | T001 |
| 1 | T002 |
| 1 | T003 |
| 2 | T004 |
| 2 | T005 |
| 2 | T005 |
| 2 | T006 |
| 2 | T007 |
执行SQL后会得到如下结果:
| user_id | Count Jobs with one activity |
|---|---|
| 1 | 2 |
| 2 | 3 |
完全符合你要求的输出格式~
内容的提问来源于stack exchange,提问作者تیم کبیروید
相关产品推荐
相关产品推荐

