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

3表关联查询:实现广播列表的联系人数量统计

三表关联统计广播列表及对应联系人数量

核心思路

由于联系人可归属多个广播列表,必须借助中间关联表broadcast_contact建立broadcast_list和contacts的关联,通过JOIN+GROUP BY实现每个广播列表的联系人数量统计。

最终SQL语句

假设表结构如下(自行替换实际字段名):

  • contacts:主键contact_id
  • broadcast_list:主键broadcast_id,名称字段broadcast_name
  • broadcast_contact:关联字段broadcast_id、contact_id
SELECT 
    bl.broadcast_name,
    COUNT(DISTINCT bc.contact_id) AS contact_count
FROM 
    broadcast_list bl
LEFT JOIN 
    broadcast_contact bc ON bl.broadcast_id = bc.broadcast_id
LEFT JOIN 
    contacts c ON bc.contact_id = c.contact_id
GROUP BY 
    bl.broadcast_id, bl.broadcast_name;

关键细节说明

  1. LEFT JOIN的作用:用LEFT JOIN关联广播列表和中间表,确保所有广播列表都被统计,哪怕某个列表没有关联联系人(此时计数为0)。如果只需要统计有联系人的列表,可改为INNER JOIN。
  2. COUNT(DISTINCT):必须加DISTINCT,防止同一联系人多次加入同一广播列表时被重复计数。
  3. GROUP BY字段:必须包含广播列表的主键(broadcast_id)和名称(broadcast_name),保证分组逻辑准确——避免不同ID但名称相同的列表被错误合并。

特殊情况处理

如果广播列表表名是带空格的Broadcast list,需要用反引号包裹表名:

SELECT 
    `Broadcast list`.broadcast_name,
    COUNT(DISTINCT bc.contact_id) AS contact_count
FROM 
    `Broadcast list`
LEFT JOIN 
    broadcast_contact bc ON `Broadcast list`.broadcast_id = bc.broadcast_id
LEFT JOIN 
    contacts c ON bc.contact_id = c.contact_id
GROUP BY 
    `Broadcast list`.broadcast_id, `Broadcast list`.broadcast_name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:05:15