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

如何在单条SQL JOIN查询中实现多维度统计计数?

解决客户-房产-租户-许可证的层级统计问题

嘿,我来帮你搞定这个统计需求!你已经迈出了第一步,现在只需要在现有SQL基础上,正确关联租户和许可证表,同时避免重复计数(这是多层一对多关联统计的关键坑点)。

问题分析

因为每个层级都是一对多关系(客户→多个房产,房产→多个租户,租户→多个许可证),如果直接把所有表join起来,会产生笛卡尔积,导致统计出来的数量远大于实际值——比如一个房产有5个租户,这条房产记录会被重复5次,直接count的话房产数就会被多算。所以必须用COUNT(DISTINCT)来确保每个实体只被统计一次。

最终SQL语句

假设你的租户表是profile_tenant(关联房产的字段是Property_ID),许可证表是profile_permit(关联租户的字段是Tenant_ID),可以用以下SQL实现需求:

SELECT 
    cli.Client_Name AS Client,
    COUNT(DISTINCT prop.id) AS Properties,
    COUNT(DISTINCT tnt.id) AS Tenants,
    COUNT(DISTINCT prmt.id) AS Permits
FROM profile_Client cli
LEFT JOIN profile_property prop ON cli.id = prop.Client_ID
LEFT JOIN profile_tenant tnt ON prop.id = tnt.Property_ID
LEFT JOIN profile_permit prmt ON tnt.id = prmt.Tenant_ID
GROUP BY cli.Client_Name
ORDER BY cli.Client_Name;

语句解释

  1. COUNT(DISTINCT prop.id):统计每个客户的唯一房产数量,避免因为多租户导致的重复计数。
  2. COUNT(DISTINCT tnt.id):统计每个客户关联的唯一租户总数,不管租户属于哪个房产。
  3. COUNT(DISTINCT prmt.id):统计每个客户关联的唯一许可证总数,不管许可证属于哪个租户/房产。
  4. LEFT JOIN:确保即使客户没有房产、租户或许可证,也会被保留在结果中(对应数量为0)。

预期输出

执行后会得到你想要的表格样式:

ClientPropertiesTenantsPermits
Client 1212402312203
Client 216220327203

如果你的表字段名和假设的不一样,只需要调整JOIN条件里的关联字段即可~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:22:58