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

BigQuery技术需求:按月统计各国/地区销售、订单等核心数据

BigQuery月度销售统计实现方案

原SQL存在的问题

  • 子查询全局统计所有订单数,未按地区和月份分组,导致每个分组返回相同的总订单数
  • 字段别名错误:COUNT(DISTINCT CustomerID) 被命名为 SalesPersonID,混淆了客户数与销售人员数
  • GROUP BY包含OrderDate(日度)和TotalDue,导致无法按月份聚合,反而会拆分同一地区同一月份内不同日期、不同金额的记录

正确实现SQL

SELECT
  -- 将日度日期转换为月度,返回当月第一天;也可使用FORMAT_DATE("%Y-%m", OrderDate)得到"YYYY-MM"格式的年月字符串
  DATE_TRUNC(OrderDate, MONTH) AS order_month,
  TerritoryID,
  COUNT(SalesOrderID) AS order_count, -- 统计订单数量
  COUNT(DISTINCT CustomerID) AS customer_count, -- 统计客户数量
  COUNT(DISTINCT SalesPersonID) AS salesperson_count, -- 统计销售人员数量
  SUM(TotalDue) AS total_sales_amount -- 统计销售总金额
FROM
  adwentureworks_db.salesorderheader
-- 可选:根据业务需求过滤无效数据,比如取消的订单
-- WHERE Status = 5 -- 请根据实际业务状态值调整
GROUP BY
  order_month,
  TerritoryID
ORDER BY
  order_month DESC,
  TerritoryID;

关键说明

  • 日期聚合:用DATE_TRUNC(OrderDate, MONTH)把日度数据收拢到月度维度,确保同月份的所有记录归为一组
  • 聚合函数逻辑:
    • COUNT(SalesOrderID):直接统计独立订单数(每个SalesOrderID对应一个订单)
    • COUNT(DISTINCT CustomerID):去重统计当月该地区的唯一客户数量
    • COUNT(DISTINCT SalesPersonID):去重统计当月该地区的唯一销售人员数量(需确保表中存在SalesPersonID字段,字段名不符请自行调整)
    • SUM(TotalDue):累加当月该地区的销售总金额
  • 分组规则:仅按order_month(月度)和TerritoryID(地区)分组,避免无关字段导致的分组拆分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:20:28