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

如何统计STORE 1每月首次下单的客户数量?

解决月度客户统计的SQL问题

首先帮你理清楚核心逻辑:你当前的SQL语句其实已经能实现每月下单的独立客户数量统计——因为COUNT(DISTINCT o.customerID)会自动把当月内多次下单的同一客户只计算一次,而同一客户在不同月份下单会被分别计入对应月份,这是月度活跃客户统计的正常逻辑。

如果你觉得结果有“重复”,大概率是混淆了「月度活跃客户」和「新增客户」的概念,下面分两种常见需求给出针对性方案:

情况1:统计每月下单的独立客户数(月度活跃客户)

你的原SQL已经满足需求,还可以做些小优化(比如不需要关联Customers表,因为你没用到该表的字段):

SELECT
  EXTRACT(YEAR FROM o.order_date) AS year,
  EXTRACT(MONTH FROM o.order_date) AS month,
  COUNT(DISTINCT o.customerID) AS total_customers
FROM `store1.Orders` AS o
WHERE o.purchase_status = 'completed' -- 可选:如果只统计已完成的有效订单
GROUP BY year, month
ORDER BY year ASC, month ASC -- 建议同时按年排序,避免跨年月份混乱

注:如果不需要区分年份,可以去掉year的分组和排序,但通常月度统计关联年份才更有参考意义。

情况2:统计每月的新增客户数(首次下单的客户)

如果你的目标是找出每个月里第一次在店铺下单的客户(即之前从未有过订单记录),那需要先计算每个客户的首次下单日期,再按月份统计:

WITH customer_first_order AS (
  SELECT
    customerID,
    MIN(order_date) AS first_order_date
  FROM `store1.Orders`
  WHERE purchase_status = 'completed' -- 可选:仅考虑有效订单
  GROUP BY customerID
)
SELECT
  EXTRACT(YEAR FROM cfo.first_order_date) AS year,
  EXTRACT(MONTH FROM cfo.first_order_date) AS month,
  COUNT(cfo.customerID) AS new_customers
FROM customer_first_order AS cfo
GROUP BY year, month
ORDER BY year ASC, month ASC

为什么原SQL会出现“同一客户不同月份被统计”?

这是正常现象:比如客户A在1月和2月都下了单,那他会被计入1月和2月的total_customers,这正是月度活跃客户的统计逻辑——统计当月有过下单行为的所有独立客户。如果这不是你想要的结果,你可以补充说明实际需求(比如统计累计客户数),我们再进一步调整语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:17:39