2016-12-02 57 views
2

您好,我有两个不同的表,同场created_date(日期时间) 现在我想记录,其对与加盟表daywise记录我对个别计数如下查询完成:Mysql的加入与同日计表记录查询

SELECT DATE(created_date), COUNT(*) FROM table1 GROUP BY DAY(created_date) 
SELECT DATE(created_date), COUNT(*) FROM table2 GROUP BY DAY(created_date) 

和我收到个人是这样的结果:

enter image description here

enter image description here

结果,我需要:

DATE(created_date)  count(table1)  count(table2) 
2016-12-01     10     3 
2016-12-02     1     0 
2016-12-05     1     0 
2016-11-29     1     0 
2016-11-30     4     1 

现在我只想加盟个别浏览次数按表这些结果任何人都可以请帮我与此配置文件....

+0

请给我们显示您的原始数据。创建一个SQL小提琴。 –

+0

Vipul,无论是数据还是期望的输出都可以不同,在第二个表中最后创建的日期应该是'2016-11-30'或第一个表的最后'2016-12-30'。但要获得输出,应该在第二个表格中更正日期。 – Susang

回答

2

先来UNION在两个表之间,然后使用条件聚合来确定两个表中每个表的计数。请注意,我引入了一个名为table_name的字段来跟踪两个表中的每个表的数据。

SELECT t.created_date, 
     SUM(CASE WHEN t.table_name = 'one' THEN 1 ELSE 0 END) AS count_table_one, 
     SUM(CASE WHEN t.table_name = 'two' THEN 1 ELSE 0 END) AS count_table_two 
FROM 
(
    SELECT DATE(created_date) AS created_date, 'one' AS table_name 
    FROM table1 
    UNION ALL 
    SELECT DATE(created_date), 'two' 
    FROM table2 
) t 
GROUP BY t.created_date 

我一直在使用DATE以使查询正确。

+0

没有得到正确的结果 [链接](http://prntscr.com/decudo) –

+1

@VipulLakhtariya请再次尝试我的查询。我认为问题在于你的原始计数忽略了NULL(默认行为)。我添加了逻辑来保存这个。 –

+1

谢谢....它的工作:-) –

0

它不太难,只需使用union如果不需要允许重复行,其他所有(也意味着允许重复)也可以使用union all

SELECT DATE(created_date), COUNT(*) FROM table1 GROUP BY DAY(created_date) 
UNION 
SELECT DATE(created_date), COUNT(*) FROM table2 GROUP BY DAY(created_date) 
1

您的查询的一个问题,你是DAY(日期)和分组显示“日期”这样的结果将是第一次约会日子(日期),但重蹈覆辙,以避免误解:)

select IFNULL(A.cd, B.cd), A.cnt, B.cnt from 
(SELECT DAY(created_date) d, DATE(created_date) cd, COUNT(*) cnt 
    FROM table1 GROUP BY DAY(created_date)) as A 
LEFT JOIN 
(SELECT DAY(created_date) d, DATE(created_date) cd , COUNT(*) cnt 
    FROM table2 GROUP BY DAY(created_date)) B ON B.d = A.d 
+0

得到不准确的结果.. –

+0

@Vipul,你读过评论的代码?你是什​​么意思由“不确切” – 2oppin

+0

我得到这个:[link](http://prntscr.com/ded0iq) –

0
SELECT T.create_date,ISNULL(T.count,0)AS Counttable1,ISNULL(X.count,0)AS Counttable2 FROM(SELECT DATE(created_date) AS create_date,COUNT(*) as count FROM table1 GROUP BY DAY(created_date)) AS T LEFTJOIN(SELECT DATE(created_date) AS create_date, COUNT(*) as count FROM table2 GROUP BY DAY(created_date))AS X ON T.create_date=X.create_date 
1

试试这个:

SELECT created_date, sum(countTable1) countTable1, 
    sum(countTable2) countTable2 
FROM (
SELECT DATE(created_date) created_date, COUNT(*) countTable1, NULL countTable2 
FROM table1 GROUP BY DAY(created_date) 
UNION ALL 
SELECT DATE(created_date) created_date, NULL, COUNT(*) countTable2 
FROM table2 GROUP BY DAY(created_date)) t GROUP BY t.created_date 
+1

没有得到确切的结果:[link](http ://prnt.sc/decxfo) –

+0

这个答案看起来很像我的。 –

0

你确实需要一个SQL UNION。由于maytch领域,JOIN会自然消除计数。即如果您在这两个table1table2再有2016年12月1日在created_date一个JOIN会给你的,而不是2

SELECT DATE(total.created_date), COUNT(*) 
FROM (
    SELECT created_date FROM table1 
    UNION ALL 
    SELECT created_date FROM table2) as total 
GROUP BY total.created_date 

在这里,你只需联盟的两个表,因为他们有一个算一个计数1匹配列名称。然后你从两张表中取回每一个日期。这是在内部查询。外部查询然后进行计数。

希望是有道理的。