我有一张名为order的桌子,看起来是这样的:
我想展示的是:
1.只买一次的顾客总数(一次去商店,可能是他们买了多件东西,但这只是一次事件)
2.购买次数超过1次的顾客总数(超过一次)
我一直在执行以下查询,但结果并不完全符合从透视表中看到的内容。在每个购物会话中,可以有多个行和多个项目,但是每个购物会话仍然有一个唯一的标识符和一个唯一的日期。
选择计数(不同的customer_id)
从作为c的命令
其中(选择COUNT(不同的transaction_id) )
FROM orders as b
WHERE
b.customer_id = c.customer_id) =1
我用>1代替最后一行来代替不止一次购物的顾客。
如事先提供任何帮助,我们将不胜感激。
发布于 2020-01-09 15:53:10
您可以使用两个级别的聚合:首先计算每个客户的访问次数(即,他们至少有一个事务处理的不同天数),然后检查有多少客户进行了一次访问,有多少客户进行了更多的访问。
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)
来减少事务日期的时间部分。根据您的数据库,其他选项可能是可用的。
https://stackoverflow.com/questions/59673511
复制