2012-02-28 152 views
5

當選擇一個DATE並且該表格中不存在該日期時,它當前將返回一個空的結果集。我如何能夠返回數爲零,這些空的結果集,而不是?:如果沒有結果,MySQL查詢返回數字'零'

SELECT SUM(TOTAL), SUM(5STAR), STORE, DATE 
    FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL 

MySQL returned an empty result set (i.e. zero rows) 

我想,而不是返回SUM(TOTAL)SUM(5STAR)的結果(如果零行)作爲數字零(0)。

FULL表結構:

  • ID =主
  • DATE = UNIQUE(日期)
  • STORE
  • 五星
  • 4星
  • 星級
  • 2星級
  • 1STAR
  • TOTAL
  • FROM = UNIQUE
+0

表結構? – 2012-02-28 19:00:15

+0

添加了完整的表格結構。也許獨特可能會導致一個問題?我新來這個不知道。 – ToddN 2012-02-28 19:06:55

+0

那麼如果你在結果集中沒有行,你想返回一行0-s呢?我有點困惑。 – 2012-02-28 19:18:44

回答

0

,我認爲它會更容易處理日PHP端的空結果集(計算返回的行)。如果你想在數據庫中處理它,你應該創建一個存儲過程。

DELIMITER $$ 

CREATE PROCEDURE `mc`.`new_routine` (IN DT DATETIME) 
BEGIN 

IF EXISTS (SELECT 1 FROM `table` WHERE DATE >= @DT) 
THEN 
    SELECT SUM(TOTAL) AS SumTotal, SUM(5STAR) AS Sum5Star, STORE, `DATE` 
    FROM `table` 
    WHERE DATE >= @DT 
    GROUP BY TOTAL; 
ELSE 
    SELECT 0 AS SumTotal, 0 AS Sum5Star, NULL AS STORE, NULL AS `DATE`; 
END IF; 

END 
8

TRY

SELECT 
     IFNULL(SUM(TOTAL), 0) AS total, 
     IFNULL(SUM(5STAR), 0) AS FiveStar, 
     STORE, 
     DATE 
FROM `table` 
WHERE DATE >= '2012-02-24' 
GROUP BY TOTAL 

Reference

+1

也可以試試'COALESCE' – diEcho 2012-02-28 18:59:25

18

嘗試COALESCE

SELECT COALESCE(SUM(TOTAL),0), COALESCE(SUM(5STAR),0), STORE, DATE 
FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL