SQL按条件查询商品随套餐销售与单独销售的数量实现方案
实现SQL语句
我们可以通过条件聚合实现需求,按交易字段特征区分两种销售场景,分别累加销量即可:
SELECT t.code, -- 统计作为套餐组成部分的销量:level=1且action为CHOICE的记录对应套餐子项 SUM(CASE WHEN t.level = 1 AND t.action = 'CHOICE' THEN t.qty ELSE 0 END) AS `QTY with Meal`, -- 统计单品销售的销量:level=0且action为RECIPE的记录对应单独售卖 SUM(CASE WHEN t.level = 0 AND t.action = 'RECIPE' THEN t.qty ELSE 0 END) AS `Sold Alone` FROM `Transaction` t -- 如需校验编码在主表中存在,可打开下方关联逻辑 -- INNER JOIN `Master` m ON t.code = m.code WHERE t.code = 10005 GROUP BY t.code;
逻辑说明
- 随套餐销售的判断依据:交易表中10005的记录
level=1属于二级子项,action='CHOICE'代表是套餐的组成项,对应示例中821、721两个套餐下各有1条符合条件的记录,累加后销量为2 - 单独销售的判断依据:交易表中10005的记录
level=0属于一级交易项,没有所属的父级套餐,对应示例中1条符合条件的记录,销量为1
该语句兼容多订单统计场景,会自动按条件累加所有订单中对应场景的销量。
内容的提问来源于stack exchange,提问作者Mohd
相关产品推荐
相关产品推荐

