Непонятность с COUNT(*) и группировкой

CyberMax
Дата: 16.08.2012 06:22:33
FB 2.5. Всегда думал, что COUNT(*) возвращает 0, если нет строк. Как, например, в этом случае:
SELECT COUNT(*) FROM RDB$DATABASE D WHERE 1 = 0

А вот нижеследующий запрос возвращает NULL:
SELECT COUNT(*) FROM RDB$DATABASE D WHERE 1 = 0 GROUP BY D.RDB$RELATION_ID

Вопрос: это так и должно быть?
oleg_m
Дата: 16.08.2012 08:27:20
CyberMax
А вот нижеследующий запрос возвращает NULL:
SELECT COUNT(*) FROM RDB$DATABASE D WHERE 1 = 0 GROUP BY D.RDB$RELATION_ID

Нет.
Он как и должен - возвращает 0 строк.
То, что видишь в гриде IBE - всегда сверяй с "0 records fetched".
CyberMax
Дата: 16.08.2012 08:43:41
oleg_m,

Да, точно, возвращается 0 строк. Тогда почему этот запрос должен давать именно такой результат?
oleg_m
Дата: 16.08.2012 09:10:30
CyberMax, потомучто если сгруппировать 0 строк, то 0 строк и получится.
Если затем в каждой полученной строке(группе) посчитать count(*) то результат не изменится - 0 строк.

В первом запросе COUNT(*) считает кол-во строк.
Во втором - кол-во строк в полученных группах. Групп 0шт.

Кол-во групп можно снова посчитать снаружи:
SELECT COUNT(*)
FROM (SELECT COUNT(*) AS b FROM RDB$DATABASE D WHERE 1 = 0 GROUP BY D.RDB$RELATION_ID)

результат 0
CyberMax
Дата: 16.08.2012 09:23:32
oleg_m,

Конечно же, нет групп - нет строк. Заработался, сбило с толку использование конструкции как подзапроса. Спасибо.
Микросекунда
Дата: 16.08.2012 09:59:48
oleg_m пишет:

> потомучто если сгруппировать 0 строк, то 0 строк и получится.
> Если затем в каждой полученной строке(группе) посчитать count(*) то
> результат не изменится - 0 строк.

А как же тогда вот это: 8838597 и вот это 8837853 ?

Posted via ActualForum NNTP Server 1.5

Микросекунда
Дата: 16.08.2012 10:10:01
Микросекунда пишет:

> А как же тогда вот это: 8838597 и вот это 8837853 ?

А, группировка же. Тогда все понятно.

Posted via ActualForum NNTP Server 1.5