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

使用CASE语句与GROUP BY聚合实现客户类型统计查询

客户类型分类与账户数量统计SQL实现

需求说明

使用CASE语句对客户类型进行分类,结合GROUP BY子句与聚合函数统计不同类型客户的账户数量。

原代码问题分析

提供的原始SQL存在以下问题:

  • GROUP BY子句的CASE逻辑是拼接具体门店/个人名称,导致分组维度为单个客户/门店,而非按预设的客户类型统计,不符合需求
  • CASE语句未闭合,存在语法错误
  • 客户类型判断逻辑倒置(将仅存在PersonID的客户标记为store)

修正后的SQL代码

SELECT 
    COUNT(AccountNumber) AS 账户数量,
    CASE 
        WHEN c.PersonID IS NOT NULL AND c.StoreID IS NOT NULL THEN '关联联系人的门店客户'
        WHEN c.PersonID IS NOT NULL AND c.StoreID IS NULL THEN '个人客户'
        WHEN c.PersonID IS NULL AND c.StoreID IS NOT NULL THEN '门店客户'
        ELSE '异常客户'
    END AS 客户类型
FROM Sales.Customer AS c
LEFT JOIN Person.Person AS p ON c.PersonID = p.BusinessEntityID
LEFT JOIN Sales.Store AS s ON c.StoreID = s.BusinessEntityID
GROUP BY 
    CASE 
        WHEN c.PersonID IS NOT NULL AND c.StoreID IS NOT NULL THEN '关联联系人的门店客户'
        WHEN c.PersonID IS NOT NULL AND c.StoreID IS NULL THEN '个人客户'
        WHEN c.PersonID IS NULL AND c.StoreID IS NOT NULL THEN '门店客户'
        ELSE '异常客户'
    END

代码说明

  • 统计逻辑:通过COUNT(AccountNumber)统计各类型客户的账户总数
  • 客户类型分类:利用CASE语句根据PersonID和StoreID的存在情况划分客户类型:
    • 同时存在PersonID和StoreID:归类为「关联联系人的门店客户」
    • 仅存在PersonID:归类为「个人客户」
    • 仅存在StoreID:归类为「门店客户」
    • 两者均不存在:归类为「异常客户」
  • 分组逻辑:GROUP BY子句复用SELECT中的CASE分类逻辑,确保按客户类型维度进行分组统计
  • 关联表:使用LEFT JOIN关联个人信息表Person.Person和门店信息表Sales.Store,保证所有客户数据都被纳入统计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:25:22