1
noparking188 2023-03-31 21:22:42 +08:00
能信息给全点嘛,看了想骂人
|
2
silypie 2023-03-31 22:12:34 +08:00
能把 customer_id 作为主键吗
|
3
silypie 2023-03-31 22:16:57 +08:00
要不按月查询,这样就能用上索引,然后做一下汇总
|
4
wuxi889 OP @silypie 这种复购的计算逻辑就是要按规定的时间范围去重,按月去汇总是没有意义的(一个月内也许没有复购,但是第二个月复购了。在查询第一个月时不算复购,查询第一到第二个月时,就算复购了)。
|
5
meta 2023-04-01 08:40:25 +08:00
你这种情况,如果对数据的实时性要求不高,可以先在后台做好每个用户的摘要数据,不必要每次都去流水里面查询。如果要即时数据,也可以先把历史数据做好摘要,即时数据只在当月的流水里面查询就可以了。
|
6
iluhcm 2023-04-01 09:53:41 +08:00 via iPhone
这种涉及到汇总的需求,要看投入的资源怎么样,ROI 值不值得。是否有必要做实时?离线 t+1 或者 h+1 行不行?
一种可行解是新建一张汇总表去做存储,按周期更新,按照用户维度去汇总。 |
8
qiayue 2023-04-01 10:29:33 +08:00
拆分问题,第一步找出所有购买两次以上的用户数量,第二步找出所有购买用户数量,用两个 sql 分别查一次,之后用程序算复购比例,这会比只用一个 sql 查询更快。
第一个 sql 找出所有购买了 2 次以上的用户数量,这里假设 status = 1 表示订单已支付: select count(t.customer_id) buy_2_times_customer_c from (select customer_id,count(distinct order_id) order_c from order where paid_at>='2022.01.01' and paid_at<='2023.03.01' and status=1 group by customer_id having order_c>=2) t 第二个 sql 找出所有购买用户数量: select count(distinct customer_id) total_customer_c from order where paid_at>='2022.01.01' and paid_at<='2023.03.01' and status=1 最后用 buy_2_times_customer_c / total_customer_c 就是比例了。 |
9
qiayue 2023-04-02 10:16:21 +08:00
我还帮你问了 gpt4
https://gpt.best/NoMhNsx1 |