MySQL запрос на возврат числа «ноль», если нет результатов - PullRequest
5 голосов
/ 28 февраля 2012

При выборе ДАТЫ, и эта дата не существует в моей таблице, в настоящее время она вернет пустой набор результатов. Как я могу иметь возможность вернуть нулевое число для этих пустых результирующих наборов вместо этого:

    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).

ПОЛНАЯ СТРУКТУРА СТОЛА:

  • ID = Основной
  • ДАТА = УНИКАЛЬНО (дата)
  • STORE
  • 5Star
  • 4star
  • 3star
  • 2star
  • 1STAR
  • ИТОГО
  • ОТ = УНИКАЛЬНЫЙ

Ответы [ 3 ]

18 голосов
/ 28 февраля 2012

Попробуйте COALESCE

SELECT COALESCE(SUM(TOTAL),0), COALESCE(SUM(5STAR),0), STORE, DATE
FROM `table` WHERE DATE >= '2012-02-24' GROUP BY TOTAL
8 голосов
/ 28 февраля 2012

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

Ссылка

0 голосов
/ 28 февраля 2012

Я думаю, что было бы легче обрабатывать пустой набор результатов на стороне 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
...