MySQL如何统计用户已读完的完整章节总次数 多表关联查询实现
实现思路
- 先统计每个用户对各章节下每一个片段的阅读次数
- 对同一用户的同一章节,取所有片段阅读次数的最小值,即为该章节的完整读完次数(每集齐一整套所有片段的阅读记录就算完成1次)
- 汇总所有章节的完成次数,得到用户累计读完完整章节的总次数
实现SQL
SELECT user_id, SUM(chapter_finish_count) AS total_chapters_read FROM ( -- 计算每个用户每个章节的完整读完次数 SELECT ubt.user_id, brp.bible_chapter_id, MIN(portion_read_cnt) AS chapter_finish_count FROM ( -- 统计每个用户读每个章节下每个片段的次数 SELECT user_id, bible_reading_portion_id, COUNT(*) AS portion_read_cnt FROM user_bible_trackings GROUP BY user_id, bible_reading_portion_id ) ubt_cnt INNER JOIN bible_reading_portions brp ON ubt_cnt.bible_reading_portion_id = brp.id GROUP BY ubt_cnt.user_id, brp.bible_chapter_id ) user_chapter_finish GROUP BY user_id;
结果验证
针对你提供的测试数据,上述SQL执行后输出结果和预期完全一致:
| user_id | total_chapters_read |
|---|---|
| 1 | 5 |
内容的提问来源于stack exchange,提问作者kunal
相关产品推荐
相关产品推荐

