为何在BigQuery中添加SQL分组语句后出现字段未聚合报错?
BigQuery分组查询报错解决
你遇到的是SQL分组查询的基础规则问题:当使用GROUP BY子句时,SELECT列表里的每一列要么是GROUP BY中的分组字段,要么必须用聚合函数(比如COUNT()、MAX()、STRING_AGG()等)进行处理。
看你的报错SQL:
SELECT Playtime, Feedback, Review FROM `get-started-with-sql.Hogwarts_legacy_game.reviews` WHERE Feedback = 'Positive' AND Playtime != 0 GROUP BY Playtime ORDER BY Playtime DESC
你只按Playtime分组,但Feedback和Review既没出现在GROUP BY里,也没做聚合处理,BigQuery无法确定如何将同一Playtime分组下的多条Feedback、Review合并成单行结果,因此抛出错误。
解决方案分两种场景:
场景1:仅需筛选Positive反馈且游玩时长不为0的记录,按Playtime降序排列
完全不需要GROUP BY,直接保留筛选条件+排序即可,在你精简后的SQL基础上补充条件和排序:SELECT Playtime, Feedback, Review FROM `get-started-with-sql.Hogwarts_legacy_game.reviews` WHERE Feedback = 'Positive' AND Playtime != 0 ORDER BY Playtime DESC场景2:确实需要按Playtime分组(比如统计各游玩时长的评论数、合并评论内容)
针对Feedback:因为你已经通过WHERE Feedback = 'Positive'过滤,所有分组内的Feedback值都是Positive,可直接将其加入GROUP BY,或者用MAX(Feedback)(结果一致);针对Review,如果要合并同组内的所有评论内容,用STRING_AGG(Review, '; '),如果要统计评论数量用COUNT(Review),示例如下:-- 合并同一Playtime下的所有评论内容 SELECT Playtime, Feedback, STRING_AGG(Review, '; ') AS all_reviews FROM `get-started-with-sql.Hogwarts_legacy_game.reviews` WHERE Feedback = 'Positive' AND Playtime != 0 GROUP BY Playtime, Feedback ORDER BY Playtime DESC -- 统计各Playtime对应的评论数量 SELECT Playtime, COUNT(Review) AS review_count FROM `get-started-with-sql.Hogwarts_legacy_game.reviews` WHERE Feedback = 'Positive' AND Playtime != 0 GROUP BY Playtime ORDER BY Playtime DESC
内容的提问来源于stack exchange,提问作者Mario R. Matundulo
相关产品推荐
相关产品推荐

