在SQL聚合函数中应用逐行条件逻辑:MySQL SKU转化率计算
计算SKU指定价格下的转化率(满足数据量条件)
嘿,我来帮你搞定这个MySQL的计算需求!首先咱们先明确两张表的合理结构(如果你的表字段名不一样,直接替换就行):
假设的表结构
- 明日待售SKU定价表(
sku_tomorrow_pricing):sku_id:SKU唯一标识tomorrow_price:明日拟售价格
- SKU历史销售访客表(
sku_sales_visitor_history):sku_id:SKU唯一标识price:历史销售时的价格visitor_count:该价格下的访客数order_count:该价格下的订单数
接下来,咱们可以通过关联两张表,匹配明日价格对应的历史数据,然后计算转化率,同时过滤出符合数据量要求的记录,对不满足条件的也做相应处理(你原问题没写完,我这里提供两种常见的处理方式,你可以按需调整):
解决方案SQL
SELECT tp.sku_id, tp.tomorrow_price, -- 满足条件时计算转化率,否则返回NULL或标记 CASE WHEN svh.visitor_count >= 100 OR (svh.visitor_count >= 50 AND svh.order_count >= 1) THEN ROUND(svh.order_count / svh.visitor_count, 4) -- 保留4位小数,按需调整 ELSE NULL -- 或者替换为 '数据不足' 这类文本标记 END AS conversion_rate, svh.visitor_count, svh.order_count FROM sku_tomorrow_pricing tp LEFT JOIN sku_sales_visitor_history svh ON tp.sku_id = svh.sku_id AND tp.tomorrow_price = svh.price -- 若只想保留有对应历史数据的SKU,把LEFT JOIN改成INNER JOIN即可 ORDER BY tp.sku_id;
关键逻辑解释
- 关联方式:用
LEFT JOIN确保所有明日待售的SKU都能被列出,哪怕没有对应价格的历史数据(此时visitor_count和order_count会为NULL,最终conversion_rate也会是NULL) - 条件判断:
CASE语句严格匹配你要求的两个阈值条件,只有满足其一才计算有效转化率 - 可读性优化:用
ROUND函数控制转化率的小数位数,避免冗余的小数影响阅读 - 灵活调整:如果需要给不满足条件的SKU明确标识,把
ELSE NULL改成ELSE '数据不足'即可(注意此时conversion_rate字段类型会变为字符串,按需选择)
如果你的原问题里对不满足条件的SKU有特定处理逻辑(比如用同类SKU均值填充、直接忽略等),可以补充细节,我再帮你调整SQL!
内容的提问来源于stack exchange,提问作者Brad Davis
相关产品推荐
相关产品推荐

