2017-05-26 50 views
0

我想從表中選擇公司ID,日期和號碼,但是這個查詢並沒有顯示一些月份有一些公司的號碼爲0。如何選擇每個月甚至他們沒有價值

下面是查詢:

SELECT c.name, date_format(e.created, '%y_%m') AS date, count(*) 
FROM company c 
JOIN edited e 
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00' 
GROUP BY c.id, date 

一些這樣4 16_12結果2 4 17_01 4 4 17_04 2 4 17_05的2 而不17_03(3月)。它怎麼能用0顯示17_03?

+0

您能否提供相關表格的模式以及樣本數據和預期輸出? –

+0

我有三個表,公司(ID 1,名稱A/ID 2,名稱A/ID 3,名稱C),編輯(ID 1,發送ID 1,創建2017-01-01/ID2,send_id4,創建了2017-02 -01/id3,send_id6,created2017-02-22)和send(id1,company_id1,created2017-01-01/id2,company_id1,created2017-02-02/id3,company_id 1,created2017-05-01/id4,company_id 1,創建了2017-01-01/id5,company_id2,created2016-12-01/id6,company_id2,created2017-02-22) –

+0

當我添加評論時,格式發生了變化,希望你能明白我的意思。對於編輯過的表格,公司可能每個月都沒有數據,我不確定發送表格是否包含每個月的數據。我如何選擇每個月的值,如果沒有任何價值的月份,它可以顯示:2017-04 0(這是單元格計數列。) –

回答

0

如果您的連接不符合ON子句中的值,則不會返回元組,因此您不會計算行數。如果你有一個固定的企業和日期,你可以手動設置你的價值觀與UNION聲明:

(SELECT 'company_name1', 'date1', COUNT(*) 
FROM company c 
JOIN edited e 
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00') 
UNION 

(SELECT 'company_name2', 'date2', COUNT(*) 
FROM company c 
JOIN edited e 
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00') 

#and make this for companies that not will return zero at count 
UNION 
(SELECT c.name, date_format(e.created, '%y_%m') AS date, count(*) 
FROM company c 
JOIN edited e 
on c.id=e.company_id AND e.created >='2016-12-13 00:00:00' AND e.created <='2017-05-20 00:00:00' 
GROUP BY c.id, date) 
0
SELECT c.id 
    , ym.y 
    , ym.m 
    , count(e.created) cnt 
    FROM (SELECT @startDate := date_add(@startDate, interval 1 month) date 
       , year(@startDate) y 
       , month(@startDate) m 
      FROM HugeTable 
      JOIN (SELECT @startDate := '2016-11-01' 
         , @endDate := '2017-05-01' 
       ) months 
      WHERE @startDate < @endDate 
     ) ym 
    LEFT JOIN edited e 
     ON year(e.created) = ym.y 
     AND month(e.created) = ym.m 
    LEFT JOIN company c 
     ON c.id = e.company_id 
    GROUP BY ym.y 
     , ym.m 
     , c.id 

HugeTable可以有足夠的記錄數月數的任何表顯示。

+0

感謝您的回答。巨大的表應該有每個記錄,但我沒有這樣的表。有沒有其他的查詢可以工作? –

+0

只需**編輯**作爲巨大的表,它會沒事的。我猜。 – Sal

+0

在某些情況下,擁有一個日期表並不瘋狂,因爲可以比運行中創建行更高效。檢查[this](https://stackoverflow.com/questions/14105018/generating-a-series-of-dates)。 – Sal