ВЫБЕРИТЕ расположение столбца ссылки на выражение списка, которое не сгруппировано и не агрегировано в [1:8]

# #mysql #sql #google-bigquery

Вопрос:

 select location, max(new_vaccinations) from `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations`  where new_vaccinations =  (  select sum(new_vaccinations) as totalVaccinated  from `nomadic-vine-330117.PortfolioProject.Covid_Vaccinations`  where continent is not null  group by location  order by totalVaccinated desc  limit 3 );  

Я получаю эту ошибку:

ВЫБЕРИТЕ расположение столбца ссылки на выражение списка, которое не сгруппировано и не агрегировано в [1:8]

Это большой вопрос.

Комментарии:

1. Вы выбираете одну строку, потому что вы объединяете строки с max(new_vaccinations) и есть GROUP BY предложение nio. Но вы выбираете а location . Который location ? вероятно, в вашем столе их много. Вы получаете это синтаксически правильно, либо удалив location предложение из своего SELECT предложения, либо добавив a GROUP BY location . Объясните, чего вы пытаетесь достичь.

2. Внутри подзапроса вы группируете его по местоположению. Это означает, что подзапрос приводит к одной строке в каждом местоположении. Но затем вы сравниваете результат с помощью where new_vaccinations = . Ты не можешь. Вы можете использовать = при сравнении двух значений. Используйте IN при поиске значения в наборе данных. Но я не знаю, чего вы на самом деле пытаетесь достичь. Так что я не знаю, что предложить.

3. когда я добавляю группу по местоположению, я получаю следующее: Агрегирование агрегаций не допускается в [1:19]

4. Это странно. Почему BigQuery запретил бы читать агрегированный промежуточный результат и снова агрегировать? Это может быть побочным эффектом. Как уже упоминалось, использование = вами в сочетании с подзапросом, который возвращает более одной строки, является еще одной ошибкой. Пожалуйста, объясните, что вы хотите, чтобы запрос выполнялся.

5. Хорошо. Запрос полностью запутан. Извините, что так говорю. Я опубликую ответ.

Ответ №1:

В вашем запросе есть синтаксические ошибки:

  • Объединение в одну последнюю строку и выбор одного местоположения, не уточняя, в каком именно.
  • Сравнение одного значения с результирующим набором, возможно, из многих строк = .
  • Я думаю, что вы не можете использовать обратные ссылки на всем пути, но вместо этого вам придется использовать их для отдельных имен: nomadic-vine-330117 PortfolioProject Covid_Vaccinations Возможно, я здесь ошибаюсь.

В вашем запросе тоже есть семантические ошибки:

  • Подзапрос возвращает одну строку для каждого местоположения. Вы рисуете три из них, но сравниваете их общую сумму со значением одной строки. Это может совпадать только в том случае, если в трех верхних расположениях в таблице всего по одной строке в каждом. Но тогда зачем вам объединяться?

Вы говорите, что хотите получить 3-ю по величине вакцинацию по стране (местоположению). Однако, похоже, вы действительно хотите, чтобы страна заняла 3-е место по их вакцинации вместо этого. Конечно, я могу ошибаться.

Первый шаг ранжируйте страны по количеству вакцинаций. Затем выберите № 3.

 select * from (  select  location,  dense_rank() over(partition by country order by sum(new_vaccinations) desc) as rnk  from `nomadic-vine-330117`.portfolioproject.covid_vaccinations cv  group by location ) ranked where rnk = 3;  

Посмотрите, как это относится к связям и хотите ли вы так с ними обращаться.

Комментарии:

1. Я попробовал это, но это ничего не дало. пустой результат

2. Тогда остается всего до двух сумм новых вакцинаций. Если, например, сумма всех стран равна 100, то все они находятся на позиции № 1, ни одна из них не находится на позиции № 3.

3. таблица состоит из всех стран на всех континентах.

4. В приведенном ниже запросе указаны 3 лучших числа прививок в каждой стране. Мне просто нужно извлечь из него 3-й по величине с помощью внешнего запроса. выберите отдельную сумму(new_vaccinations) в качестве общей вакцинации, из nomadic-vine-330117.PortfolioProject.Covid_Vaccinations которой континент не равен нулю, сгруппируйте по местоположению в порядке ограничения по общей вакцинации 3

5. Таблица состоит из всех стран? Это таблица стран с одной строкой для каждой страны/местоположения? Зачем тогда подводить итоги? Я думал, что в каждой стране есть несколько записей, которые необходимо суммировать.