MySQL:将3个查询合并为一个

时间:2018-04-25 08:40:01

标签: 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次以获取这些数据。 有可能将这些组合成1个查询来得到这样的东西吗?

date       | count1 | count2 | count3
-------------------------------------
2018-04-25 | 5      | (null) | 2
2018-04-24 | (null) | 3      | 4

2 个答案:

答案 0 :(得分:3)

尝试以下

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小提琴 - http://www.sqlfiddle.com/#!9/bcfb9e/1

答案 1 :(得分:0)

您可以使用joins执行此操作 只需将日期作为连接列,并使用外部联接,以获取未找到任何组合的null值。然后重命名select部分中的列。

如果您对该群组有疑问,您也可以在MySQL中使用subquerys

您还可以使用as keyword来更好地了解您的表格。

当表中有许多元组时,优化查询会很棒。