我不明白为什么我的Athena(Presto)SQL查询无法正常工作

时间:2019-02-15 19:22:39

标签: sql amazon-athena presto

我同时有一个特定的问题和一个更笼统的问题...就上下文而言,我正在使用Athena。这是我的具体问题:

1)我正在尝试编写一个查询,以计算按国家/地区细分的连续两个月的DAU(我最终希望按国家和日期细分的DAU / MAU,但以为我会从简单开始... )。我对如何解决此问题的想法是,我需要两个查询,每个月查询一次,使用按国家/地区分组并应用必要的过滤器。最后,我可以加入country以获得包含国家/地区的1列,随后的列包含DAUS的两个月。这是我沙沙作响的查询:

 SELECT count(distinct uuid) m1, country
FROM user u1
WHERE month(date(dt)) = 12 
AND YEAR(date(dt)) = 2018

INNER JOIN (SELECT count(distinct uuid) m2, country
  FROM user
  WHERE month(date(dt)) = 11
        AND YEAR(date(dt)) = 2018 GROUP BY country
) t ON t.country = u1.country

GROUP BY country

这是什么问题?错误:mismatched input 'join' expecting {<eof>

2)我更笼统的问题是,在构建更复杂的查询时应该怎么看?我已经进行了多年编程,但似乎总是发现自己陷入了复杂的SQL查询中,并在错误消息后出现错误消息(这似乎也难以解释)。

感谢所有建议:)

2 个答案:

答案 0 :(得分:1)

where和group by应该放在where连接子句

之后
    SELECT count(distinct uuid) m1, country
    FROM user u1
    INNER JOIN (SELECT count(distinct uuid) m2, country
      FROM user
      WHERE month(date(dt)) = 11
            AND YEAR(date(dt)) = 2018 GROUP BY country
    ) t ON t.country = u1.country
    WHERE month(date(dt)) = 12 
    AND YEAR(date(dt)) = 2018
    GROUP BY country

答案 1 :(得分:0)

您想将两个Select的结果相加:

{{ product_properties(concatProps(product.properties), "<dt class='detail'>{key}:</dt><dd>{value}</dd><br><br>") }}

但这将删除两个月都没有数据的国家,然后您必须切换到FULL OUTER JOIN。

在您的情况下,使用条件聚合要容易得多:

SELECT t2.*, t.m2
FROM
 (   
   SELECT count(distinct uuid) m1, country
   FROM user u1
   WHERE month(date(dt)) = 12
     AND YEAR(date(dt)) = 2018
   GROUP BY country
 ) as t2
JOIN
 (
   SELECT count(distinct uuid) m2, country
   FROM user
   WHERE month(date(dt)) = 11
     AND YEAR(date(dt)) = 2018
   GROUP BY country
 ) as t
ON t.country = t2.country