【发布时间】:2019-07-09 23:34:08
【问题描述】:
我有一个具体的问题和一个更一般的问题...对于上下文,我使用的是 Athena。这是我的具体问题:
1)我正在尝试编写一个查询,计算按国家/地区细分的连续 2 个月的 DAU(我最终希望按国家和日期细分 DAU/MAU,但我想我会从简单的开始... )。我对如何解决这个问题的想法是,我需要两个查询,每个月一个,它使用国家分组并应用必要的过滤器。最后,我将能够加入国家以获得包含国家/地区的 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 查询卡住,并在错误消息后遇到错误消息(这似乎也几乎无法解释)。
感谢所有建议:)
【问题讨论】:
-
您的第一个问题表明您不了解SQL的基本语法。我建议你问另一个问题,包括样本数据、期望的结果以及你想要做什么的解释。您提供的任何 SQL 都会有所帮助。
-
查看您的部分/处理顺序的 SQL,它们不是有效的 SQL。您的加入位置不正确(必须在 where 和 group by 之前)并且 group by 必须在最后
-
在编写 SQL 查询之前,您应该做的第一件事就是学习如何编写正确的语法。没有 dbms 将能够执行您的查询。
-
关于 Q2:我已经编程多年这可能是您遇到 SQL 问题的原因 :-) 切换到所谓的 基于集合的思维 意味着忘记很多你以前做过的事情。顺便说一句,解释编程语言返回的错误消息并不容易......
标签: sql amazon-athena presto