如何在 Athena (Presto) 中过滤聚合值?

Zha*_* Yi 4 sql presto amazon-athena

我无法从 Athena 控制台运行带有 where 条件的简单 sql 选择。以下是详细信息:

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

我收到一个错误SYNTAX_ERROR: line 1:74: Column 'c' cannot be resolved

Athena 似乎无法识别该as列名称。我怎样才能让它发挥作用?它使用不同的语法吗?

Lam*_*nus 5

逻辑上的流程是这样的(执行引擎可以自由选择不同的执行策略):

  1. WHEREWHERE已应用(如果有的话;当然,您的情况没有)
  2. GROUP BY计算聚合
  3. HAVING应用于聚合值 - 在这里您可以参考聚合(例如count(*))和GROUP BY列(例如name在您的情况下)
  4. SELECT分配已应用(从现在起c已知意味着count(*)
  5. ORDER BY被应用,因此它可以使用c
  6. LIMIT被申请;被应用

另请参阅Group by 和having 的工作原理以及Presto 文档SELECT

  • 这个答案有什么意义?OP的问题通过将“HAVING c > 1”替换为“HAVING count(*) > 1”来解决,他没有要求提供所应用的关键字序列。我遇到了同样的问题,似乎 Presto 不支持使用带有聚合别名的“HAVING” (6认同)
  • 这个解释(目前的情况)是不正确的。“HAVING”是在“GROUP BY”聚合之后应用的,因此计数已经完成。 (2认同)