MySQL query to return the number "zero" if there are no results

When selecting DATE, and this date does not exist in my table, it will currently return an empty result set. How can I return a null number for these empty result sets ?:

    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)

I want to return results instead SUM(TOTAL)and SUM(5STAR)(if zero rows) as the number 0 (0).

STRUCTURE OF THE FULL TABLE:

  • ID = primary
  • DATE = UNIQUE (date)
  • STORE
  • 5star
  • 4star
  • 3star
  • 2star
  • 1STAR
  • GENERAL
  • FROM = UNIQUE
+5
source share
3 answers

I think it would be easier to process an empty result set on the PHP side (count the returned rows). If you want to process it in a database, you must create a stored procedure.

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
0

COALESCE

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

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

+8

All Articles