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

多表联查指定列去重统计:Offer重复计数问题求助

解决Offer按Profile统计且去重的问题

我懂你遇到的麻烦了——你想要统计指定Profile关联的每个Offer的数量,但不管这个Offer绑定了多少个Skill,都只计数一次,之前的查询因为Skill的多条重复记录,导致统计结果不对,对吧?

问题根源

你的原始查询里,ternary_relationship表中同一个id_Offer + id_Profile会对应多个id_Skill,和Offer表JOIN之后,会生成多条相同Offer的记录。COUNT(*)会把这些重复的记录全部算进去,所以才会出现重复计数的问题。

解决方案

这里有两种简单的修正方法,都能实现“每个Offer仅计数一次”的需求:

方法1:先去重再关联

先从三元关系表中筛选出指定Profile关联的唯一Offer列表,再和Offer表关联统计:

SELECT o.business_name, COUNT(tr.id_Offer) AS offer_count
FROM Offer o
INNER JOIN (
    -- 先获取指定Profile关联的所有唯一Offer
    SELECT DISTINCT id_Offer 
    FROM ternary_relationship 
    WHERE id_Profile = '1'
) tr ON o.id_Offer = tr.id_Offer
GROUP BY o.business_name
ORDER BY offer_count DESC;

方法2:直接在COUNT中使用DISTINCT

如果不想写子查询,可以直接在COUNT()里指定去重的字段,这样即使JOIN后有重复的Offer记录,也只会计数一次:

SELECT o.business_name, COUNT(DISTINCT o.id_Offer) AS offer_count
FROM Offer o
INNER JOIN ternary_relationship tr 
    ON o.id_Offer = tr.id_Offer 
    AND tr.id_Profile = '1'
GROUP BY o.business_name
ORDER BY offer_count DESC;

结果验证

针对你提供的测试数据,这两种方法都会得到正确的结果:

  • business-1 计数1(对应Offer1)
  • business-2 计数1(对应Offer2)

因为Profile1分别关联了Offer1和Offer2各一次(不管每个Offer绑定多少Skill),所以每个business_name的计数都是1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:28:21