MySQL:将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; 现在,我分

我有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;
现在,我分别运行这些查询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
时,子查询列的顺序很重要。但是子查询的顺序并不重要。