You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中多对多关系下用户可访问文章数统计问题

统计用户可访问文章数量的解决方案

核心思路

通过sector_id关联两张表是完全正确的方向,关键要避免同一篇文章被同一用户重复统计——比如用户关注多个sector,但某篇文章只属于其中一个,不能因为关联关系重复计数。

具体SQL语句

SELECT 
    u.user_id,
    COUNT(DISTINCT a.article_id) AS accessible_articles_count
FROM 
    users u
LEFT JOIN 
    articles a ON u.sector_id = a.sector_id
GROUP BY 
    u.user_id;

语句说明

  1. 关联逻辑:用users和articles的sector_id做连接,直接匹配用户关注的所有sector对应的文章,这正是你需要的关联方式。
  2. 去重计数:COUNT(DISTINCT a.article_id)能保证同一篇文章哪怕被用户通过多个关注的sector匹配到(业务场景中可能出现),也只会被统计一次,避免虚高的计数。
  3. LEFT JOIN的必要性:如果用户没关注任何sector,或者关注的sector下没有文章,这条语句依然会把用户列出来,计数为0,不会遗漏任何用户。

示例数据运行结果

用你给出的示例数据执行上述SQL,得到的结果如下:

user_idaccessible_articles_count
user13
user23

对应的逻辑:

  • user1关注sector123和234,对应文章article1、article4(属于sector123)和article2(属于sector234),共3篇。
  • user2关注sector453和123,对应文章article3(属于sector453)、article1和article4(属于sector123),共3篇。

额外提示

如果你的业务里不存在“同一篇文章属于多个sector”的情况,DISTINCT可以省略,但保留它能让语句更健壮,兼容未来的业务变化。

内容的提问来源于stack exchange,提问作者Inereste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:01:07