# #sql #google-bigquery
#sql #google-bigquery
Вопрос:
Я пытаюсь запросить общедоступный набор данных «new_york_citibike» в google bigquery, чтобы вернуть num_of_bikes_available и среднее значение num_of_bikes_available для каждого идентификатора станции, но когда я запускаю код, я получаю ошибку:
ВЫБЕРИТЕ список ссылок на выражения в столбце num_bikes_available, который не сгруппирован и не агрегирован в [2:5]
Код SQL является:
SELECT num_bikes_available, station_id, AVG(num_bikes_available) AS avg_num_bikes_available FROM `bigquery-public-data.new_york_citibike.citibike_stations` GROUP BY station_id;
Комментарии:
1. Вам нужно объединить
num_bikes_available
, какsum(num_bikes_available)
2. Но почему я должен это обобщать? Не могу ли я просто выбрать столбец num_bikes_available. Так как в этом столбце указано количество доступных велосипедов. Извини, если это звучит глупо.
3. Какое значение должно отображаться в базе
num_bikes_available
данных ? Их несколько для каждогоstation_id
. Самый низкий, самый большой, …?4. Я понял. Но, согласно набору данных, num_bikes_available представляет количество велосипедов, доступных для аренды для station_id. И я также проверил, что в наборе данных есть 1584 различных идентификатора станции. Кроме того, если требуется агрегирование, то почему этот запрос не возвращает ошибку. «ВЫБЕРИТЕ station_id,num_bikes_available,(ВЫБЕРИТЕ AVG(num_bikes_available) ИЗ
bigquery-public-data.new_york_citibike.citibike_stations
) КАК avg_num_bikes_available ИЗbigquery-public-data.new_york_citibike.citibike_stations
»
Ответ №1:
В BigQuery, если вы используете ГРУППИРОВКУ ПО классу, все остальные столбцы должны быть либо СГРУППИРОВАНЫ, либо вам нужно выполнить некоторые вычисления, такие как: СУММА/МИН/МАКС… и т. Д., Поэтому в этом случае вам нужно сделать:
SELECT station_id, SUM(num_bikes_available) AS sum_num_bikes_available, AVG(num_bikes_available) AS avg_num_bikes_available FROM `bigquery-public-data.new_york_citibike.citibike_stations` GROUP BY station_id;
Я также предлагаю вам переключить столбец station_id на первый столбец, потому что так это будет выглядеть намного понятнее.
Комментарии:
1. Но, согласно набору данных, num_bikes_available представляет количество велосипедов, доступных для аренды для station_id. И я также проверил, что в наборе данных есть 1584 различных идентификатора станции. Кроме того, если требуется агрегирование, то почему этот запрос не возвращает ошибку.
SELECT station_id,num_bikes_available,(SELECT AVG(num_bikes_available) FROM bigquery-public-data.new_york_citibike.citibike_stations ) AS avg_num_bikes_available FROM bigquery-public-data.new_york_citibike.citibike_stations