MySQL中计算多/单次采购记录商品的销售额占比
解决MySQL中多采购记录商品销售额占比问题
嘿,我来帮你搞定这个计算需求!根据你给的数据表和期望输出,我们可以通过分步骤的SQL查询来实现。
思路拆解
首先得明确两个核心步骤:
- 先给每个商品标记是「多条采购记录(multip)」还是「单条采购记录(single)」
- 分别统计两类商品的总销售额,再除以整体总销售额得到占比
完整SQL代码
WITH item_sales AS ( -- 第一步:按商品分组,计算每个商品的总销售额和采购记录数 SELECT ItemId, SUM(SalesAmt) AS total_item_sales, COUNT(*) AS record_count FROM your_table_name -- 这里替换成你实际的表名 GROUP BY ItemId ), category_sales AS ( -- 第二步:按商品类型(多/单条记录)汇总总销售额 SELECT CASE WHEN record_count > 1 THEN 'multip' ELSE 'single' END AS itemType, SUM(total_item_sales) AS category_total FROM item_sales GROUP BY itemType ) -- 第三步:计算每个类型销售额占总销售额的比例 SELECT itemType, ROUND(category_total / (SELECT SUM(category_total) FROM category_sales), 2) AS Sales_pct FROM category_sales;
代码说明
item_salesCTE:把每个商品的所有采购记录合并,算出该商品的总销售额和采购次数,这样就能区分是单条还是多条记录的商品。category_salesCTE:用CASE语句给商品分类,然后把同一类别的销售额加总。- 最后一步:通过子查询获取所有商品的总销售额,用每个类别的总销售额除以它,再用
ROUND函数保留两位小数,就得到了期望的占比结果。
把代码里的your_table_name换成你实际使用的表名,运行后就能得到你想要的输出啦!
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

