当前位置: 首页 > news >正文

SQL171 零食类商品中复购率top3高的商品

SQL171 零食类商品中复购率top3高的商品

原代码

withtemp1 as (selectdate_sub(date(max(event_time)), interval 90 day) as start_date,date(max(event_time)) as end_datefromtb_order_overall),temp2 as (selectproduct_id,uid,count(*) as 2_cntfromtb_order_detailjoin tb_order_overall using (order_id)join tb_product_info using (product_id)wheretag = '零食'and (date(event_time) between (selectstart_datefromtemp1) and (selectend_datefromtemp1))group byproduct_id,uidorder byproduct_id,uid)
selectproduct_id,round(sum(if(2_cnt >= 2, 1, 0)) / count(*), 3) as repurchase_rate
fromtemp2
group byproduct_id
order byrepurchase_rate desc,product_id
limit3

问题

  1. 时间范围计算
    date_sub(date(max(event_time)), interval 90 day) 应改为 date_sub(date(max(event_time)), interval 89 day)
    (因为 between 包含边界值,90天区间应为 [max_date-89, max_date]

  2. 订单状态过滤
    未筛选已付款订单(status=1),会包含待付款/退款订单

  3. 复购率分母逻辑
    当前分母是 count(*)(所有购买记录数),但实际应为 ​去重的购买人数

修正代码

WITH 
date_range AS (SELECT DATE_SUB(DATE(MAX(event_time)), INTERVAL 89 DAY) AS start_date,DATE(MAX(event_time)) AS end_dateFROM tb_order_overallWHERE status = 1  -- 只统计已付款订单
),product_purchases AS (SELECTd.product_id,o.uid,COUNT(*) AS purchase_countFROM tb_order_detail dJOIN tb_order_overall o ON d.order_id = o.order_idJOIN tb_product_info p ON d.product_id = p.product_idWHERE p.tag = '零食'AND o.status = 1  -- 已付款订单AND DATE(o.event_time) BETWEEN (SELECT start_date FROM date_range) AND (SELECT end_date FROM date_range)GROUP BY d.product_id, o.uid
)SELECTproduct_id,ROUND(SUM(CASE WHEN purchase_count >= 2 THEN 1 ELSE 0 END) / COUNT(DISTINCT uid),  -- 去重计算总人数3) AS repurchase_rate
FROM product_purchases
GROUP BY product_id
ORDER BY repurchase_rate DESC,product_id
LIMIT 3;

http://www.lryc.cn/news/597355.html

相关文章:

  • stm32使用USB虚拟串口,因电脑缺少官方驱动而识别失败(全系列32单片机可用)
  • CSP2025模拟赛1(2025.7.23)
  • rust嵌入式开发零基础入门教程(三)
  • C++day1
  • Android网络请求,Retrofit,OKHttp学习
  • Python爬虫--Xpath的应用
  • rust嵌入式开发零基础入门教程(五)
  • 使用阿里云 ESA 边缘函数转发代理 docker registry
  • OpenLayers 快速入门(十)常用 API 补充
  • 量化金融简介(附电子书资料)
  • 分布式系统中的缓存设计与应用
  • 三步实现Android系统级集成:预装Google TTS + 默认引擎设置 + 语音包预缓存方案
  • AI助力,轻松实现人声分离伴奏提取
  • 【金融机器学习】第五章:最优投资组合——Bryan Kelly, 修大成(中文翻译)
  • 手机开启16k Page Size
  • 大模型【进阶】(四)QWen模型架构的解读
  • SpringBoot07-数据层的解决方案:SQL
  • FireFox一些设置
  • latex中既控制列内容位置又控制列宽,使用>{\centering\arraybackslash}p{0.85cm}
  • OpenLayers 快速入门(二)Layer 对象
  • 深入掌握 Python 面向对象的灵魂——魔法函数(Magic / Dunder Methods)全景指南
  • CAN的终端电阻
  • 设计模式代码总结
  • 用 PyTorch 实现全连接网络识别 MNIST 手写数字
  • Android插件化实现方案深度分析
  • window下c++共享内存,进程互斥锁。
  • macOS配置maven及报错处理:zsh: permission denied: mvn
  • 大厂总结常用分析问题方法之CMMI-IDEAL模型
  • VRRP技术-设备备份技术
  • Modbus TCP转Devicenet:水泥厂PLC与多类仪表的自动化通信实践