2012-11-05 43 views
2

我是mySql的新手。我必須根據星期幾來計算表格中的點擊次數。我怎麼能得到0沒有使用MySQL的記錄?

這裏期限取決於數據庫。但是如果上週沒有記錄,它會發生什麼,它不在列表中。但我需要它作爲0.那麼,我該怎麼做?

SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK 
       AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK 
       AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK 
     AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK 
       THEN 'up to 7 days ago' 
      END WeekPeriod, IFNULL(count(CLICKS),0) TotalClicks 

FROM TABLE 

WHERE PERIOD >= NOW() - INTERVAL 4 WEEK 

GROUP BY CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK 
        AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK 
       AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK 
       AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '08-14 days ago' 

    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK 
       THEN '01 to 7 days ago' 

END 
ORDER BY WeekPeriod"; 

答案應該是這樣的

1-7 0 
8-15 14 
16-21 34 
21-28 45 

回答

1
SELECT uq.timespan, COALESCE(tsq.TotalClicks, 0) as Clicks FROM (
SELECT '22-28 days ago' as timespan 
union SELECT '15-21 days ago' 
union SELECT '8-14 days ago' 
union SELECT 'up to 7 days ago' 
)uq LEFT JOIN (
SELECT CASE 
    WHEN PERIOD >= NOW() - INTERVAL 4 WEEK 
       AND PERIOD < NOW() - INTERVAL 3 WEEK THEN '22-28 days ago' 
    WHEN PERIOD >= NOW() - INTERVAL 3 WEEK 
       AND PERIOD < NOW() - INTERVAL 2 WEEK THEN '15-21 days ago' 
    WHEN PERIOD >= NOW() - INTERVAL 2 WEEK 
     AND PERIOD < NOW() - INTERVAL 1 WEEK THEN '8-14 days ago' 
    WHEN PERIOD >= NOW() - INTERVAL 1 WEEK THEN 'up to 7 days ago' 
      END WeekPeriod, 
      count(CLICKS) TotalClicks 
FROM TABLE 
WHERE PERIOD >= NOW() - INTERVAL 4 WEEK 
GROUP BY WeekPeriod 
/*ORDER BY WeekPeriod -- unnecessary, GROUP BY implicits ORDER BY*/ 
)tsq ON uq.timespan = tsq.WeekPeriod 
+0

我如何爲過去4個月,而不是過去4個星期做到這一點?嘗試但沒有得到正確的結果。 - – Vadapalli

+0

@BhavaniMalladi用'INTERVAL 4 MONTH'代替'INTERVAL 4 WEEK'' – fancyPants

+0

感謝您的回覆。是的,我試圖逐月替換。我需要按月輸出。像nov,oct,sep,aug – Vadapalli

相關問題