RDMS : MariaDB 10.1.23
MCRE:
create table entity
(
id_entity int auto_increment,
created_at timestamp default CURRENT_TIMESTAMP,
constraint product_log_pk
primary key (id_entity)
);
INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;
INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;
INSERT INTO entity SET created_at = CURRENT_TIMESTAMP;
-- I would like this to return 0
SELECT IF(COUNT(e.id_entity) = 0, 0, e.id_entity)
FROM entity e
WHERE e.created_at < CURRENT_DATE - INTERVAL 1 DAY GROUP BY e.created_at;
SQLFiddle: http://sqlfiddle.com/#! 9 / f32a01 / 1
Рассмотрим следующий запрос:
SELECT IF(COUNT(e.some_field) = 0, 0, e.some_field)
FROM entity e
WHERE e.created_at > CURRENT_DATE - INTERVAL 1 DAY GROUP BY e.created_at
Без предложения GROUP BY я знаю, что COUNT()
вернет 0
, если ни одна строка не соответствует запросу.
Я также знаю, что, если мой GROUP BY "потерпит неудачу" (если у меня нет строки для группировки, в моем примере, если ни одна строка не удовлетворяет e.created_at > CURRENT_DATE - INTERVAL 1 DAY
), то COUNT () не будет ничего возвращать ( 0 ряд). Как я могу убедиться, что COUNT () возвращает 0 (1 строка со значением 0
) в этом случае?