【问题标题】:AWS Athena CAST with GROUP BYAWS Athena CAST 与 GROUP BY
【发布时间】:2018-01-13 01:53:51
【问题描述】:

我在 Athena AWS 中有一个带有时间戳字段的表。我想按日期对它们进行分组。我的 SQL 查询是:

SELECT CAST(createdat AS DATE) FROM conversations GROUP BY createdat 但我的结果如下:

您可以看到 group by 不起作用,原因是新表的名称字段 _col0 而不是 createdat。 我也试过: SELECT CAST(createdat AS DATE) FROM conversations GROUP BY _col0 但我得到了错误。

有人有什么建议吗?我会很感激的

【问题讨论】:

    标签: sql amazon-web-services amazon-athena


    【解决方案1】:

    尝试在 group by 中使用 then same

    SELECT CAST(createdat AS DATE) 
    FROM conversations 
    GROUP BY CAST(createdat AS DATE)
    

    【讨论】:

      【解决方案2】:

      相同但略短

      SELECT CAST(createdat AS DATE) 
      FROM conversations 
      GROUP BY 1;
      

      【讨论】:

      • 尝试建议对给定答案的改进,(尤其是因为“SQL 代码的简洁性”并不重要)。
      【解决方案3】:

      我知道这个问题已经很老了,但想首先回答它失败的原因。

      Athena 遵循相同的标准 ANSI SQL 约定,该约定定义了处理 SQL 查询的标准。以下是处理顺序

      1. FROM 子句
      2. WHERE 子句
      3. GROUP BY 子句
      4. HAVING 子句
      5. SELECT 子句
      6. ORDER BY 子句

      从上面我们可以看到 GROUP BY 子句在 SELECT 子句之前被处理,所以在 GROUP BY 子句被求值时别名是未知的。

      其他两个答案中的任何一个,即列号(AFAIK 它从 1 开始)或完整功能 CAST(createdat AS DATE) 都可以。

      SELECT CAST(createdat AS DATE) 
      FROM conversations 
      GROUP BY 1;
      

      SELECT CAST(createdat AS DATE) 
      FROM conversations 
      GROUP BY CAST(createdat AS DATE);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-01
        • 2020-06-27
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 2021-08-05
        • 2018-04-11
        • 2010-09-30
        相关资源
        最近更新 更多