Snowflake中如何按ItemName分组合并重复行?使用GROUP BY遇错误
解决方案:Snowflake中合并重复行
问题原因
你之前使用GROUP BY报错,是因为SQL的核心规则:SELECT子句中未使用聚合函数的列,必须全部出现在GROUP BY子句中。如果只GROUP BY ItemName,其他列既不在GROUP BY里也未被聚合,Snowflake会直接抛出语法错误。
两种可行方案
方案1:用DISTINCT快速去重
如果你的需求是当所有列的数值完全匹配时保留唯一一行,直接用DISTINCT是最简单的方式,它会自动过滤掉所有完全重复的记录:
SELECT DISTINCT StudioID, StudioName, ItemName, ServiceCategory, RevenueCategory, SecondRevenueCategory FROM BV_SalesOverview WHERE -- 注意:如果SecondRevenueCategory存储的是SQL NULL值(不是字符串'Null'),请改为 SecondRevenueCategory IS NOT NULL SecondRevenueCategory <> 'Null' ORDER BY ItemName
方案2:用GROUP BY指定所有分组列
如果你更倾向于用GROUP BY,需要把SELECT里的所有非聚合列都放到GROUP BY中,这样只有当这些列的数值完全相同时,才会被合并为一行:
SELECT StudioID, StudioName, ItemName, ServiceCategory, RevenueCategory, SecondRevenueCategory FROM BV_SalesOverview WHERE -- 同样注意NULL值的判断逻辑 SecondRevenueCategory <> 'Null' GROUP BY StudioID, StudioName, ItemName, ServiceCategory, RevenueCategory, SecondRevenueCategory ORDER BY ItemName
额外注意事项
你的WHERE子句中SecondRevenueCategory <> 'Null'是判断列值等于字符串'Null',如果该列实际存储的是SQL标准的NULL值(空值),请替换为SecondRevenueCategory IS NOT NULL,否则无法正确过滤空值。
内容的提问来源于stack exchange,提问作者pryor1bc
相关产品推荐
相关产品推荐

