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

如何编写SQL查询统计近3个月按客户性别分组的累计总销售额

一、原查询存在的错误

  • 关联条件匹配错误:Product表的主键是SKU ID,并非ProductID,原语句中s.productid = p.productid的关联逻辑完全不匹配表结构,会直接报错
  • 带空格字段未转义:表结构中大量字段名带空格(比如Customer ID、Product ID、Discount Price),别名total sales也带空格,直接书写会触发语法错误,需要根据数据库类型用对应符号转义:SQL Server用[]、MySQL用反引号、PostgreSQL用双引号
  • 关联字段名书写错误:Sales表的关联字段是带空格的Customer ID、Product ID,原语句写的s.customerid、s.productid和表定义的字段名不符,无法识别

二、可优化的逻辑点

  • 销售额计算更贴合实际业务:原语句用商品原价Price计算销售额,表结构中存在Discount Price折后价字段,实际业务中优先用折后价计算实际销售额,结果会更准确,折后价为空时再 fallback 到原价即可
  • 可覆盖全性别场景:如果某个性别没有近3个月的订单,INNER JOIN会直接过滤掉该性别,若需要展示全部性别(无销售额则显示0),可改用LEFT JOIN搭配空值处理函数

三、修正后的参考查询(以SQL Server语法为例)

普通场景(仅展示有订单的性别):

SELECT 
    c.Gender,
    SUM(s.Quantity * COALESCE(p.[Discount Price], p.Price)) AS [total sales]
FROM 
    Customer c
INNER JOIN 
    Sales s ON s.[Customer ID] = c.CustomerID
INNER JOIN 
    Product p ON s.[Product ID] = p.[SKU ID]
WHERE 
    s.[Date] >= DATEADD(MONTH, -3, GETDATE())
GROUP BY 
    c.Gender

全性别展示场景:

SELECT 
    c.Gender,
    COALESCE(SUM(s.Quantity * COALESCE(p.[Discount Price], p.Price)), 0) AS [total sales]
FROM 
    Customer c
LEFT JOIN 
    Sales s ON s.[Customer ID] = c.CustomerID AND s.[Date] >= DATEADD(MONTH, -3, GETDATE())
LEFT JOIN 
    Product p ON s.[Product ID] = p.[SKU ID]
GROUP BY 
    c.Gender

内容的提问来源于stack exchange,提问作者Thet Paing Htet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:57:02