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

pw9qyyiw  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(384)

我有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
djp7away

djp7away1#

请尝试以下操作

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号

k3fezbri

k3fezbri2#

你可以用连接来实现。
只需将日期作为联接列并使用外部联接即可获得 null 未找到组合的值。然后重命名列中的列 select 部分。
如果您对组有问题,也可以在mysql中使用子查询。
您也可以使用 as 关键字,以便更好地了解表。
当然,当表中有许多元组时,优化查询会很好。

相关问题