【发布时间】:2020-03-09 11:32:19
【问题描述】:
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)?
【问题讨论】:
-
样本数据和期望的结果会有所帮助。
标签: mysql sql mariadb aggregate-functions