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

SQL Server数据汇总:按客户分组统计年度收入及购买状态

按客户分组统计年度收入及购买情况的SQL实现

原数据表结构及数据

CustomerIDIncomeDateProduct
130001/01/2015A
130001/01/2016B
250001/01/2016A
230001/01/2015B

需求说明

按唯一CustomerID分组,输出以下信息:

  • 2015年总收入
  • 2016年总收入
  • 是否购买过产品A(Yes/No)
  • 两年总收入之和是否超过1000(Yes/No)

原代码问题分析

你写的代码存在三个核心问题:

  1. 分组字段包含productID和YEAR(DateofPurchase),导致每个客户生成多条记录,不符合“唯一CustomerID”的要求
  2. CASE和SUM的顺序错误,应该先筛选对应年份的收入再求和,而非先求和再判断
  3. 字段名错误:原表日期字段是Date而非DateofPurchase,产品字段是Product而非ProductID

正确SQL代码

SELECT 
    CustomerID,
    SUM(CASE WHEN YEAR(Date) = 2015 THEN Income ELSE 0 END) AS `Total income 2015`,
    SUM(CASE WHEN YEAR(Date) = 2016 THEN Income ELSE 0 END) AS `Total income 2016`,
    CASE WHEN MAX(CASE WHEN Product = 'A' THEN 1 ELSE 0 END) = 1 THEN 'Yes' ELSE 'No' END AS `If bought prod. A`,
    CASE WHEN SUM(Income) > 1000 THEN 'Yes' ELSE 'No' END AS `if total income (2015+2016) is above 1K`
FROM exam
GROUP BY CustomerID;

代码说明

  • 年度收入统计:用SUM包裹CASE语句,先筛选对应年份的收入再求和,确保每个客户只返回一条汇总记录
  • 是否购买过产品A:通过嵌套CASE和MAX,只要客户有过一次购买A的记录,就返回Yes
  • 总收入判断:直接对客户的所有收入求和,再判断是否超过1000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:24:10