【问题标题】:Merging 2 Table and GROUP BY date合并 2 表和 GROUP BY 日期
【发布时间】:2015-10-08 05:51:01
【问题描述】:

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

下面是我的表结构:

#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 等,但我无法解决这个问题。

【问题讨论】:

    标签: mysql merge group-by


    【解决方案1】:

    您可以使用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

    【讨论】:

    • 谢谢楼主,真的学到了很多!感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多