Почему я получаю ошибку при выполнении следующего кода SQL

# #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