Как отфильтровать значение агрегации в Athena (Presto)?

Я не могу запустить простой выбор sql с условием where из консоли Athena. Ниже приведены подробности:

SELECT name, count(*) AS c
FROM target_reddit_movie
GROUP BY name
HAVING c > 1
ORDER BY c DESC
LIMIT 10

У меня ошибка SYNTAX_ERROR: line 1:74: Column 'c' cannot be resolved.

Похоже, Афина не распознает имя столбца as. Как я могу заставить его работать? Использует ли он другой синтаксис?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
0
3 624
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Процесс логически выглядит следующим образом (механизм выполнения может выбрать другую стратегию выполнения):

  1. WHERE применяется (если есть; WHERE в вашем случае, конечно же, нет)
  2. GROUP BY агрегаты рассчитываются
  3. HAVING применяется к агрегированным значениям — здесь вы можете ссылаться на агрегированные значения (например, count(*)) и столбцы GROUP BY (например, name в вашем случае)
  4. SELECT применяются задания (отныне c известно как count(*))
  5. ORDER BY применяется, следовательно, он может использовать c
  6. LIMIT применяется

См. также Как работает Group by and Have и Документация Presto для SELECT.

Объяснение (в его нынешнем виде) неверно. HAVING применяется после GROUP BY агрегации, поэтому подсчет уже завершен.

Piotr Findeisen 29.07.2019 14:32

@PiotrFindeisen О, да, я ошибаюсь. Оператор select выполняется после предложения having. Спасибо.

Lamanus 29.07.2019 14:38

«Выражение select выполняется после having» — это верно, но его легко понять неправильно, поскольку «выражения выбора (например, агрегации) оцениваются после фильтрации строк с помощью having». Я расширил ваше объяснение, чтобы, надеюсь, быть более явным по этому поводу. Посмотрите, согласны ли вы с правками, которые я сделал.

Piotr Findeisen 29.07.2019 15:58

Спасибо за понятное объяснение, с этим согласен!

Lamanus 29.07.2019 16:05

в чем смысл этого ответа? проблема ОП решается заменой HAVING c > 1 на HAVING count(*) > 1, он не просил указать последовательность применяемых ключевых слов. У меня та же проблема, кажется, Presto не поддерживает использование HAVING с псевдонимом агрегации.

mangusta 23.09.2020 04:57

Я многое почерпнул из этого ответа, спасибо, что изложил его таким образом. По мнению @mangusta, это разница между тем, чтобы дать человеку рыбу и научить его ловить рыбу. Этот пост последний.

autonopy 07.06.2021 21:58

@autonopy дать рыбу и научить ловить рыбу - разные вопросы, и их следует рассматривать в разных темах.

mangusta 08.06.2021 23:13

Другие вопросы по теме