You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套SQL聚合语句精简列数:按SKU及集群ID聚合数据需求

解决SKU+集群ID聚合结果行数过多的问题

首先,你的核心问题很明确:你想按SKU和集群ID分组聚合,但当前查询因为保留了门店级别的维度(比如STORE_NUMBER),导致结果被拆分成了每个门店的行,最终输出4万行(5个SKU×8000家门店),而不是你期望的35行(SKU×集群ID的唯一组合)。

为什么原来的查询失效?

你用了DISTINCT试图去重,但DISTINCT会保留所有SELECT子句中字段的唯一组合——因为你的查询里嵌套了门店表和映射表,把STORE_NUMBER这类门店级字段带了进来,所以每一行都是不同的「SKU+集群+门店」组合,自然会有4万行。另外,你虽然用了SUM(ALLOCATED_QTY),但没有明确按SKU和ALLOC_CLUSTER_ID做GROUP BY,数据库会默认按所有非聚合字段分组(包括门店),这也会导致结果拆分到门店级别。

修正后的查询思路

我们需要先明确聚合维度(SKU + 集群ID),然后移除不必要的门店字段,用GROUP BY代替DISTINCT来做维度级别的聚合。以下是简化后的示例SQL:

-- 按SKU和集群ID聚合总分配数量,得到你期望的35行结果
SELECT
  -- 替换成你实际的SKU字段名(比如ALC_ITEM_LOC里的SKU)
  L.SKU,
  -- 集群ID来自映射表
  M.ALLOC_CLUSTER_ID,
  -- 聚合每个SKU+集群的总分配数量
  SUM(L.ALLOCATED_QTY) AS TOTAL_ALLOCATED
FROM ALC_ITEM_LOC L
-- 关联门店-集群映射表,把门店号映射到对应的集群ID
JOIN FDT_MAP_CLUSTER_LOCATION M 
  ON L.LOCATION = M.LOCATION -- 假设LOCATION是门店号的关联字段
-- 如果需要过滤有效门店,可以在这里加WHERE条件
-- WHERE S.STORE_STATUS = 'ACTIVE'
-- 必须按聚合维度分组
GROUP BY L.SKU, M.ALLOC_CLUSTER_ID
-- 可选:过滤掉没有分配数量的组合
HAVING SUM(L.ALLOCATED_QTY) > 0;

额外调试建议

  • 先确认维度组合数量:单独运行SELECT DISTINCT SKU, ALLOC_CLUSTER_ID FROM ALC_ITEM_LOC L JOIN FDT_MAP_CLUSTER_LOCATION M ON L.LOCATION = M.LOCATION,看看结果是不是正好35行,这样能确认你的SKU和集群ID的唯一组合数是否符合预期。
  • 检查关联字段正确性:确保LOCATION确实是门店号的映射字段,避免因为关联错误导致维度混乱。
  • 减少不必要的嵌套:原来的查询嵌套了多层RIGHT JOIN,如果不需要保留无匹配的行,用INNER JOIN会更清晰,也能避免引入多余的空值行。

内容的提问来源于stack exchange,提问作者alex_fields1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:03