Mysql 每天在Select COUNT(*)中合并2个查询
我有两个表日志和轨道,每个表都有一个时间戳,但名称不同,现在我尝试获取给定商店每天的所有日志,同时在我的轨道表中获取每天的轨道数Mysql 每天在Select COUNT(*)中合并2个查询,mysql,sql,select,count,union,Mysql,Sql,Select,Count,Union,我有两个表日志和轨道,每个表都有一个时间戳,但名称不同,现在我尝试获取给定商店每天的所有日志,同时在我的轨道表中获取每天的轨道数 SELECT DATE(clicktime), COUNT(shop) FROM LOG WHERE shop = "shop01" AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY)) GROUP BY DATE(clicktime); 此查询每天收集日志表中的所有条目,结果如下 ---------------
SELECT DATE(clicktime), COUNT(shop)
FROM LOG
WHERE shop = "shop01"
AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY))
GROUP BY DATE(clicktime);
此查询每天收集日志表中的所有条目,结果如下
--------------------------------
ClickTime | Clicks
--------------------------------
2014-12-25 | 342
--------------------------------
2014-12-24 | 232
--------------------------------
我在我的第二张桌子上得到了每天的销售额,如下所示
SELECT DATE(last_change) as SaleTime, COUNT(shop) as sale
FROM tracks
WHERE shop = "dd01"
AND (last_change > DATE_SUB(NOW(), INTERVAL 30 DAY))
AND relevant = 1
GROUP BY DATE(last_change)
输出
--------------------------------
SaleTime | sales
--------------------------------
2014-12-25 | 42
--------------------------------
2014-12-24 | 32
--------------------------------
我想将这两个查询合并到一个查询中,得到如下输出
-----------------------------------------
Time | sales | clicks
-----------------------------------------
2014-12-25 | 42 | 342
-----------------------------------------
2014-12-24 | 32 | 232
-----------------------------------------
我曾尝试使用Union作为子查询,但由于不同的表结构,此子查询在五月的情况下无法工作
有没有办法达到预期的效果 试试这个:
SELECT A.clicktime, A.shopCnt, B.saleCount
FROM (SELECT DATE(clicktime) clicktime, COUNT(shop) AS shopCnt
FROM LOG
WHERE shop = "shop01"
AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY))
GROUP BY DATE(clicktime)
) AS A
INNER JOIN (SELECT DATE(last_change) AS SaleTime, COUNT(shop) AS saleCount
FROM tracks
WHERE shop = "dd01"
AND (last_change > DATE_SUB(NOW(), INTERVAL 30 DAY))
AND relevant = 1
GROUP BY DATE(last_change)
) AS B ON A.clicktime = B.SaleTime
我强烈建议您使用
联合
所有方法,而不是内部联接
。如果您有几天没有销售或点击,则加入将删除记录:
SELECT date, SUM(sales) as sales, SUM(clicks) as clicks
FROM ((SELECT DATE(last_change) as date, COUNT(*) as sales, 0 as clicks
FROM tracks
WHERE shop = 'dd01' AND (last_change > DATE_SUB(NOW(), INTERVAL 30 DAY)) AND relevant = 1
GROUP BY DATE(last_change)
)
UNION ALL
(SELECT DATE(clicktime) as date, 0 as sales, COUNT(*) as clicks
FROM LOG
WHERE shop = 'shop01' AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY))
GROUP BY DATE(clicktime)
)
) d
GROUP BY date;