首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >统计用户购买前的访问次数。(每次购买后应重置计数)在Presto中

统计用户购买前的访问次数。(每次购买后应重置计数)在Presto中
EN

Stack Overflow用户
提问于 2022-04-13 16:49:02
回答 2查看 59关注 0票数 0

我有一个事件表,其中记录的行动,客户采取在我们的网站。我想知道一个顾客在最后购买一件商品之前拜访了多少次。

上表将聚合为

在第一周,顾客1进行了3次访问(包括他购买的那次访问)。他又在同一周的另一次拜访中买了一件东西。所以你可以在第一种情况下看到3,在第二种情况下看到1。也就是说,每次用户进行购买时,计数都应该重置。

我想出的解决方案非常混乱,速度慢(涉及多个连接和3个windows函数),在某些情况下不起作用。我漏掉了一些数据。

如果有人能在正确的方向上帮助我处理这个场景,那就太好了。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-04-13 18:11:11

试试这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WITH
-- your input, don't use in final query
visits(wk,visit_id,cust_id,has_purchased) AS (
            SELECT 1,1,1,FALSE
  UNION ALL SELECT 1,2,1,FALSE
  UNION ALL SELECT 1,3,1,TRUE
  UNION ALL SELECT 1,2,1,TRUE
)
-- real query starts here, replace following comma with "WITH"
,
with_counter AS (
  SELECT
    *
  , LAG(CASE WHEN has_purchased THEN 1 ELSE 0 END,1,0)
    OVER(PARTITION BY wk,cust_id ORDER BY visit_id)  AS grp_end
   FROM visits
)
SELECT
  wk
, cust_id
, grp_end
, COUNT(*) AS visits_before_purchase
FROM with_counter
GROUP BY
  wk
, cust_id
, grp_end
;
-- out  wk | cust_id | grp_end | visits_before_purchase 
-- out ----+---------+---------+------------------------
-- out   1 |       1 |       0 |                      3
-- out   1 |       1 |       1 |                      1
票数 0
EN

Stack Overflow用户

发布于 2022-04-13 18:47:48

我假设每一次客户访问,他们的访问id将增加1次。因此,我只是取不同的访问身份给每个客户,以了解他们在购买东西之前进行了多少次访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT weeks, visit_id, customer_id, purchase_flag, 
CASE WHEN diff IS null then visit_id else diff 
end
FROM (
    SELECT *, visit_id - LAG(visit_id) over (partition by customer_id  order by 
    customer_id, visit_id)as diff 
    FROM customer 
    WHERE purchase_flag = 1
   ) as t ORDER BY customer_id, visit_id 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71865259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文