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

如何统计每个客户的保单数量?SQL查询问题求助

客户保单数量统计的SQL解决方案

问题场景

两张表内连接后得到如下数据集:

Policy IdCustomer
1A
1B
1C
2A
2B

需要统计每个客户对应的独立保单数量,预期输出:

CustomerPolicy Count
A2
B2
C1

你之前写的SQL无法得到正确结果:

select
  CustomerName,
  COUNT(policyid) as PolicyCount
from Dummy
group by
  clientId,
  policyid

问题原因

  1. 分组维度错误:你把clientId和policyid一起加入GROUP BY,这会让分组变成「客户+单个保单」,最终统计的是每个客户在同一份保单里的出现次数,而不是客户拥有的独立保单总数。
  2. 字段名不匹配:你的查询里用了CustomerName、clientId,但数据集里对应的字段是Customer,字段名不一致会导致报错或统计错误。

正确SQL写法

这里提供两种可靠的实现方式:

方式一:直接使用COUNT(DISTINCT)去重统计

这是最简洁的写法,通过DISTINCT确保每个保单ID只被统计一次:

select
  Customer,
  COUNT(DISTINCT PolicyId) as `Policy Count`
from Dummy
group by Customer

方式二:先去重再统计(适合大数据量场景)

如果你的数据集非常大,先通过子查询去除「客户-保单」的重复关联,再统计会更高效:

-- 先筛选出唯一的客户-保单关联记录
with UniquePolicyLinks as (
    select distinct PolicyId, Customer
    from Dummy
)
-- 再按客户统计保单数量
select
  Customer,
  COUNT(PolicyId) as `Policy Count`
from UniquePolicyLinks
group by Customer

补充说明

  • 两种写法都能得到预期结果,小数据集用第一种即可;大数据量下第二种的性能表现通常更好。
  • 确保查询里的字段名和你的实际数据表完全一致,比如如果你的客户字段是ClientName,就替换掉Customer。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:12:18