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

SQL Server中统计关联超100个地址的客户所属公司数量问题

解决拥有关联地址超100的客户所属公司数量统计问题

你的原SQL语句逻辑偏了一步,咱们来拆解下问题:你要的是有至少一个客户地址数超过100的公司的数量,但原语句是按客户ID分组,最后统计每个客户对应的公司ID(每个客户只属于一个公司,所以每个分组的COUNT(DISTINCT c.Id)都是1),最终得到的是符合条件的客户数量,而非公司数量。

修正后的SQL写法(两种可选)

方法1:先筛选出地址数超100的客户,再关联公司统计

这种写法逻辑更清晰,先通过子查询找出所有满足地址数>100的客户,再关联到对应的公司,最后去重统计公司数量:

SELECT COUNT(DISTINCT c.Id) AS qualifying_company_count
FROM Companies c
INNER JOIN Customers cu ON cu.company = c.Id
INNER JOIN (
    -- 先找出地址数超过100的客户ID
    SELECT Customer
    FROM Addresses
    GROUP BY Customer
    HAVING COUNT(ID) > 100
) high_address_customers ON high_address_customers.Customer = cu.Id

方法2:先按客户分组筛选,再聚合统计公司

也可以先关联三张表,按客户分组筛选出地址数超100的记录,再对这些记录中的公司ID去重计数:

SELECT COUNT(DISTINCT c.Id) AS qualifying_company_count
FROM (
    SELECT cu.company
    FROM Customers cu
    INNER JOIN Addresses ad ON ad.Customer = cu.Id
    GROUP BY cu.Id, cu.company
    HAVING COUNT(ad.ID) > 100
) customer_company
INNER JOIN Companies c ON c.Id = customer_company.company

为什么原SQL不生效?

原语句GROUP BY cu.ID会把结果按客户拆分,每个客户对应一行,每行的COUNT(DISTINCT c.Id)结果都是1(因为一个客户只属于一个公司)。如果你执行原语句,得到的会是N行1(N是符合条件的客户数),而不是你需要的公司总数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:56:45