我如何计算超过购买的客户?
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)
修剪交易日期的时间部分。根据您的数据库,其他选项可能可用。
【讨论】:
如何在这个表达式中考虑退货单?有时我有客户一单一退货,我不想把他们算作两次购买。以上是关于我如何计算超过购买的客户?的主要内容,如果未能解决你的问题,请参考以下文章