我如何计算超过购买的客户?

Posted

技术标签:

【中文标题】我如何计算超过购买的客户?【英文标题】:How do I count the customers that made more than a purchase? 【发布时间】:2020-04-27 14:55:14 【问题描述】:

我有一个名为 order 的表,如下所示:

我正在尝试显示:

1.仅购买1次的顾客总数(一次去商店,可能是他们购买了多件商品,但这只是一次事件)

2. 购买超过 1 次(多次光顾商店)的顾客总数

我一直在执行以下查询,但结果与我从数据透视表中看到的不完全匹配。在每个购物会话中可以有多行和多个项目,但每个购物会话仍然会有一个唯一的标识符和一个唯一的日期。

选择 COUNT(distinct customer_id)

来自 订单作为 c

WHERE (SELECT COUNT(distinct transaction_id))

FROM orders as b

WHERE

    b.customer_id = c.customer_id) =1 

我将最后一行替换为 >1 来表示购物不止一次的客户

感谢您提前提供任何帮助

【问题讨论】:

请用您正在使用的数据库标记您的问题。 @GMB sql 服务器。如何考虑此表达式中的退货单?有时我有客户一单一退货,我不想把他们算作两次购买。 【参考方案1】:

您可以使用两个级别的聚合:首先计算每个客户的访问次数(即他们至少有一次交易的不同),然后检查有多少客户进行了 1 次访问和有多少人拥有更多。

select
    sum(case when cnt_visits = 1 then 1 else 0 end) customers_with_1_visit,
    sum(case when cnt_visits = 1 then 0 else 1 end) customers_with_more_visits
from (
    select customer_id, count(distinct cast(transaction_date as date)) cnt_visits
    from mytable
    group by customer_id
) t

这使用cast(... as date) 修剪交易日期的时间部分。根据您的数据库,其他选项可能可用。

【讨论】:

如何在这个表达式中考虑退货单?有时我有客户一单一退货,我不想把他们算作两次购买。

以上是关于我如何计算超过购买的客户?的主要内容,如果未能解决你的问题,请参考以下文章

获得客户一年内的首次购买

Excel - 记录客户购买的商品数量

Pandas - 计算每个客户对每个特定产品的购买次数

计算上一期而不是下一期购买的不同客户 Bigquery

SQL如何计算订单购买之间的平均时间? (根据下一行和上一行进行sql计算)

SQL:如何查询我注册6个月后购买的客户?