BigQuery运行第二段SQL报错要求聚合num_bikes_available原因问询
报错原因及解答
核心语法逻辑
使用GROUP BY子句的SQL查询,有强制语法规则:SELECT列表中的字段,要么是GROUP BY指定的分组维度,要么必须被聚合函数包裹。
你写的第二条语句按station_id分组后,所有相同station_id的行都会被归为同一个分组。此时你直接在SELECT中写num_bikes_available,数据库无法判断你需要取该分组下哪一行的num_bikes_available值,因此就会抛出你收到的报错。
需求适配说明
你的需求是同时获取单个站点的可用单车数、全量站点的平均可用单车数,第二条写法的逻辑本身也不符合需求:按station_id分组后计算的AVG(num_bikes_available)是单个站点的可用数平均值(如果station_id是表的唯一主键,这个值和该站点自身的num_bikes_available完全相同),并不是全量站点的平均可用数。
正确写法参考
你写的第一条语句仅需补充逗号即可正常运行:
SELECT station_id, num_bikes_available, (SELECT AVG(num_bikes_available) FROM bigquery-public-data.new_york_citibike.citibike_stations ) AS average_bikes_available FROM bigquery-public-data.new_york_citibike.citibike_stations
也可以用窗口函数实现,逻辑更简洁:
SELECT station_id, num_bikes_available, AVG(num_bikes_available) OVER() AS average_bikes_available FROM bigquery-public-data.new_york_citibike.citibike_stations
内容的提问来源于stack exchange,提问作者aryan barnwal
相关产品推荐
相关产品推荐

