mysql - 合并 2 个表和 GROUP BY 日期

标签 mysql merge group-by

我需要根据日期的计数来合并多个表组。

下面是我的表结构:

#table1
id date
1  2015-07-01 00:00:00
2  2015-07-02 00:00:00
3  2015-07-03 00:00:00

#table2
id date
1  2015-07-02 00:00:00
2  2015-07-02 00:00:00
3  2015-07-02 00:00:00
4  2015-07-10 00:00:00

我想要实现的目标:

#query result
date       t1_count   t2_count
2015-07-01 1          NULL
2015-07-02 1          3
2015-07-03 1          NULL
2015-07-10 NULL       1

下面是我的查询,引用了这个 link :

SELECT left(A.date,10) AS `day`
     , COUNT(A.ID) AS `a_count`
     , COUNT(B.ID) AS `b_count`
  FROM table1 A

 LEFT JOIN table2 B
    ON LEFT(A.date,10) = LEFT(B.date,10)
 GROUP BY LEFT(A.date,10)

UNION

SELECT left(B.date,10) AS `day`
     , COUNT(A.ID) AS `a_count`
     , COUNT(B.ID) AS `b_count`
  FROM table1 A

 RIGHT JOIN table2 B
    ON LEFT(A.date,10) = LEFT(B.date,10)

 GROUP BY LEFT(A.date,10);

但结果是

#query result
date       t1_count   t2_count
2015-07-01 1          0
2015-07-02 3          3
2015-07-03 1          0
2015-07-10 0          1

我尝试修改并搜索其他解决方案,例如 UNION ALL、LEFT JOIN 等,但我没有运气解决这个问题。

最佳答案

您可以使用union allgroup by来做到这一点:

select date, sum(istable1) as numtable1, sum(istable2) as numtable2
from ((select date(date) as date, 1 as istable1, NULL as istable2
       from table1
      ) union all
      (select date(date) as date, NULL as istable1, 1 as istable2
       from table2
      )
     ) t
group by date
order by 1;

在某些情况下,聚合子查询中的数据也可以更快:

select date, sum(numtable1) as numtable1, sum(numtable2) as numtable2
from ((select date(date) as date, count(*) as numtable1, NULL as numtable2
       from table1
       group by date(date)
      ) union all
      (select date(date) as date, NULL as numtable1, count(*) as numtable2
       from table2
       group by date(date)
      )
     ) t
group by date
order by 1;

如果您希望在所需结果中使用 0 而不是 NULL,请在结果中使用 0 而不是 NULL子查询。

关于mysql - 合并 2 个表和 GROUP BY 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31493932/

相关文章:

php - 这是以类方式或 OOP 访问 mysql 的正确方法吗?

java - 合并两个 PDF 文件——一个作为背景,一个作为前景

MySQL GROUP BY 优化 - InnoDB 与 MyISAM?

使用 LEFT JOIN、GROUP BY 和 ORDER BY 进行 MySQL 查询

php - 相关视频算法 MySql 使用 genre

php - 如何限制从 Eloquent 查询中检索的信息并阻止其崩溃?

python-2.7 - 根据不规则的时间间隔合并 Pandas 数据帧

r - 合并存储在列表中的数据框

python - 迭代 pandas df 行并执行操作

mysql - 如何修复 : "No suitable driver found for jdbc:mysql://localhost/dbname" error when using pools?