SQL新手求助:统计各分支下每个商品的关联位置数量
问题解决:统计各分支商品的关联位置总数
原SQL语句的问题
你的原语句存在两个关键问题:
SELECT子句中包含了a.Loc,但GROUP BY仅按Branch和Item分组,在标准SQL模式下会报错(非聚合列必须出现在GROUP BY列表中)。COUNT(a.Branch||a.Item)的写法冗余,分组已经限定了Branch和Item的组合,直接统计位置相关的数量即可。
两种解决方案
根据你是否需要显示具体位置,提供两种写法:
方案1:仅统计每个分支-商品的位置总数(不显示具体Loc)
如果只需要分支、商品、对应位置总数的结果集,直接按Branch和Item分组统计即可:
SELECT Branch, Item, -- 如果同一分支-商品下可能存在重复的Loc记录,用COUNT(DISTINCT Loc)去重;无重复则用COUNT(*) COUNT(DISTINCT Loc) AS LocCount FROM BranchInventoryFile GROUP BY Branch, Item
方案2:显示每个具体位置,同时附带对应分支-商品的位置总数
如果需要保留每条记录的具体位置,同时显示该商品在对应分支下的总位置数,用窗口函数更高效:
SELECT Branch, Item, Loc, COUNT(DISTINCT Loc) OVER (PARTITION BY Branch, Item) AS LocCount FROM BranchInventoryFile
这里PARTITION BY Branch, Item会将数据按分支和商品分组,窗口函数COUNT(DISTINCT Loc)计算每个分组内的位置总数,每条记录都会带上这个总数。
内容的提问来源于stack exchange,提问作者Scott Wagner
相关产品推荐
相关产品推荐

