是说这个数据表中,找到最后一天 ,也就是今天的日期,max(date) over()S today 【借助开窗函数】
截至最后一天位置,也就是“今天“,表中的最新的一天
去看90天内“某商品复购率 = 近90天内购买它至少两次的人数 ÷ 购买它的总人数”
首先分析两个度量值,统计粒度是不一样的
近90天内购买它至少两次的人数:group by user_id , product_id
购买它的总人数:group by product_id
像这种统计粒度有包含关系。就可以先去把颗粒度细的那个group by出来
然后再此基础上继续查询,如果还想要粒度粗一点的度量值
就直接再此基础上用聚合函数即可
SELECT
product_id,
cast(sum(IF(num>=2,1,0)) / count(*) as decimal(16,2)) cpr
from(
SELECT
user_id,
product_id,
count(*) num
from(
SELECT
user_id,
product_id,
order_date,
max(order_date) over() today
FROM order_detail
)t1
WHERE datediff(today,order_date)<=90
group by user_id,product_id
)t2
group by product_id
order by cpr desc,product_id