我同时有一个特定的问题和一个更笼统的问题...就上下文而言,我正在使用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查询中,并在错误消息后出现错误消息(这似乎也难以解释)。
感谢所有建议:)
答案 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