MySQL:将3个查询合并为一个
我有3个收集统计数据的查询:MySQL:将3个查询合并为一个,mysql,Mysql,我有3个收集统计数据的查询: SELECT COUNT(id) count, DATE(created_at) date FROM t1 GROUP BY date; SELECT COUNT(id) count, DATE(created_at) date FROM t2 GROUP BY date; SELECT COUNT(id) count, DATE(date_started) date FROM t1 GROUP BY date; 现在,我分
SELECT
COUNT(id) count,
DATE(created_at) date
FROM t1
GROUP BY
date;
SELECT
COUNT(id) count,
DATE(created_at) date
FROM t2
GROUP BY
date;
SELECT
COUNT(id) count,
DATE(date_started) date
FROM t1
GROUP BY
date;
现在,我分别运行这些查询3次以获取这些数据。
是否可以将这些组合到一个查询中以获得类似的结果
date | count1 | count2 | count3
-------------------------------------
2018-04-25 | 5 | (null) | 2
2018-04-24 | (null) | 3 | 4
您可以使用来完成此操作。只需将日期作为联接列,并使用外部联接即可获得未找到组合的
null
值。然后在选择零件中重命名柱
如果您对组有问题,也可以在MySQL中使用
您还可以将用作
,以便更好地了解表格
当然,当表中有许多元组时,优化查询会非常好。尝试以下方法
SELECT
`date`,
SUM(count1) count1,
SUM(count2) count2,
SUM(count3) count3
FROM
(
SELECT
DATE(created_at) `date`,
COUNT(id) count1,
NULL count2,
NULL count3
FROM t1
GROUP BY DATE(created_at)
UNION ALL
SELECT
DATE(created_at) `date`,
NULL count1,
COUNT(id) count2,
NULL count3
FROM t2
GROUP BY DATE(created_at)
UNION ALL
SELECT
DATE(date_started) `date`,
NULL count1,
NULL count2,
COUNT(id) count3
FROM t1
GROUP BY DATE(date_started)
) q
GROUP BY `date`
SQL FIDLE-您可以使用union来合并数据,然后将数据从垂直方向旋转到水平方向。我尝试了这个方法,并且count1
有数字,而另一个count2
,count3
都有空值……对不起,选择的顺序与您的顺序不一样,在我改变了顺序后,我认为顺序并不重要,因为你已经做到了。看来选择顺序很重要。好的。我已经更改了答案并添加了SQL FIDLE测试。是的,使用UNION ALL
时,子查询列的顺序很重要。但是子查询的顺序并不重要。