2016-12-02 59 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匹配列名稱。然後你從兩張表中取回每一個日期。這是在內部查詢。外部查詢然後進行計數。

希望是有道理的。