Sqlite: Почему «select min (time) from asdftable» возвращает пустую строку, когда DB пуста? - PullRequest
8 голосов
/ 30 октября 2011

Это странность.У меня есть пустая база данных SQLite.

Когда я выполняю select min(time) from asdftable, я получаю пустую строку обратно.Когда я выполняю select time from asdftable, я ничего не получаю обратно (что правильно).

Есть идеи, почему это так?

1 Ответ

8 голосов
/ 30 октября 2011

Все агрегатные функции возвращают что-то, даже если ничего не найдено, просто потому, что они неявно группируют все (любые) строки в вашей таблице, чтобы получить совокупное значение. Возьмите 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...