如何用Access SQL计算物品共同出库占比?是否需转用R/Python?
用Access SQL实现共同出库占比统计
当然可以用Access SQL直接搞定这个占比统计,完全不需要急着切换到R或Python!下面我会一步步拆解逻辑,给出完整的查询语句:
核心逻辑拆解
要计算Item1出库时Item2一同出库的占比,我们需要两个关键数据:
Item1的总出库单数量(即该TK出现在多少个不同的DocumentNo里)Item1和Item2共同出现的出库单数量
完整SQL查询语句
SELECT co.TK1, co.TK2, ROUND(co.Co_Outbound / tot.Total_Outbound, 2) AS Co_Occurrence_Ratio FROM ( -- 子查询:统计每对TK共同出库的单量 SELECT a.TK AS TK1, b.TK AS TK2, COUNT(DISTINCT a.DocumentNo) AS Co_Outbound FROM access3 a JOIN access3 b ON a.DocumentNo = b.DocumentNo WHERE a.TK <> b.TK -- 排除自身和自身的无效组合 GROUP BY a.TK, b.TK ) AS co INNER JOIN ( -- 子查询:统计每个TK的总出库单量 SELECT TK, COUNT(DISTINCT DocumentNo) AS Total_Outbound FROM access3 GROUP BY TK ) AS tot ON co.TK1 = tot.TK ORDER BY co.TK1, co.TK2;
语句说明
- 子查询
co:基于你之前的关联查询,进一步统计每对TK共同出现在多少个出库单里,得到Co_Outbound(共同出库次数) - 子查询
tot:统计每个TK对应的所有出库单数量,得到Total_Outbound(总出库次数) - 最后通过
INNER JOIN关联两个子查询,用Co_Outbound / Total_Outbound计算占比,ROUND函数用来控制小数位数(这里保留2位,你可以根据需求调整)
执行后就能得到类似TK16330 | TK16331 | 0.85的结果,完全匹配你的期望输出格式。
关于R/Python的补充
如果后续你需要更复杂的分析(比如批量筛选特定物品、生成可视化报表),R或Python确实能提供更灵活的处理方式:
- Python可以用
pandas库,通过分组、合并数据框来快速计算占比 - R可以用
dplyr进行类似的分组统计操作
但就当前的占比计算需求而言,Access SQL已经足够高效,能帮你省去手动处理600+物品的麻烦。
内容的提问来源于stack exchange,提问作者bohzwah
相关产品推荐
相关产品推荐

