我有两个表,结构如下:
Table - a
datetime | camapgin_id | country | unique_id
2013-12-23 10:23:59 | 123 | US | 5475642385763
Table - b
datetime | camapgin_id | country | unique_id
2013-12-23 10:40:35 | 123 | US | 5475642385763
我想要一个查询来生成如下表:
Table - joined
day | camapgin_id | country | count(1) from a | count(1) from b
2013-12-23 | 123 | US | 100 | 82
我可以像这样用自己的查询生成每个表:
SELECT date_format(datetime, '%Y-%m-%d') AS day, campaign_id, country, count(1)
FROM a
GROUP BY day, campaign_id, country
表 b 也是如此,但这让我得到了两个不同的表。
如何通过与我发布的查询相同的 group by
连接两个表?
最佳答案
试试这个:
SELECT DATE_FORMAT(A.day, '%Y-%m-%d') AS day, A.campaign_id, A.country, MAX(tableACount), MAX(tableBCount)
FROM (SELECT DATE(datetime) AS day, campaign_id, country, COUNT(1) tableACount
FROM a GROUP BY day, campaign_id, country
) AS A
INNER JOIN (SELECT DATE(datetime) AS day, campaign_id, country, COUNT(1) tableBCount
FROM b GROUP BY day, campaign_id, country
) AS B ON A.day = B.day AND A.campaign_id = B.campaign_id AND A.country = B.country
GROUP BY A.day, A.campaign_id, A.country
编辑::
SELECT DATE_FORMAT(A.day, '%Y-%m-%d') AS DAY, A.campaign_id, A.country, MAX(tableACount), MAX(tableBCount)
FROM (SELECT DATE(DATETIME) AS DAY, campaign_id, country, COUNT(1) tableACount, 0 AS tableBCount
FROM a GROUP BY DAY, campaign_id, country
UNION
SELECT DATE(DATETIME) AS DAY, campaign_id, country, 0 AS tableACount, COUNT(1) tableBCount
FROM b GROUP BY DAY, campaign_id, country
) AS A
GROUP BY A.day, A.campaign_id, A.country
关于Mysql - 分组后连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770991/