Все агрегатные функции возвращают что-то, даже если ничего не найдено, просто потому, что они неявно группируют все (любые) строки в вашей таблице, чтобы получить совокупное значение. Возьмите count
, например:
sqlite> create table foo (a int not null);
sqlite> select count(a) from foo;
0
null
равно min
, как 0
равно count
, где строки не возвращаются.
Это может быть полезным свойством. Рассмотрим следующий пример:
sqlite> select ifnull(min(a), "I'm null") from foo;
I'm null
Если вы хотите отфильтровать этот случай, чтобы никакие записи не возвращались, вы можете использовать предложение has (и сделать группировку явной):
sqlite> select min(a) as min_a from foo group by a having min_a not null;