BigQuery使用CTE统计NFL球员时遇‘未分组或聚合’错误求解决
解决BigQuery中统计大学NFL球员数量的SQL分组错误
你遇到的错误核心是SQL分组规则:当SELECT语句中同时包含非聚合列(比如College)和聚合函数(比如COUNT())时,所有非聚合列必须出现在GROUP BY子句中,否则数据库无法确定如何分组计算聚合值。
修正后的SQL语句
保留你的CTE结构,只需添加GROUP BY子句,并给计数结果起别名提升可读性:
With cte_Players as ( SELECT displayName AS Player, collegeName AS College FROM NFL.Players) SELECT cte_players.College, COUNT(cte_Players.Player) AS Player_Count FROM cte_Players GROUP BY cte_players.College
更简洁的写法(省略CTE)
这个场景下CTE不是必须的,直接简化为以下语句效果完全一致:
SELECT collegeName AS College, COUNT(displayName) AS Player_Count FROM NFL.Players GROUP BY collegeName
补充说明
GROUP BY collegeName会让BigQuery按每所大学分组,对每组内的球员条目进行计数COUNT(displayName)和COUNT(*)在这个场景下结果相近,但用具体列名更明确(如果displayName存在NULL值会被排除,而COUNT(*)会统计所有行)
内容的提问来源于stack exchange,提问作者Ryan_Brusseau
相关产品推荐
相关产品推荐

