Понимание работы агрегатных функций в SQL имеет решающее значение для написания правильных запросов. При добавлении агрегатной функции (например, суммы, среднего, минимального, максимального, счетного) к запросу вы запрашиваете у базы данных выполнение групповой операции с набором результатов. Большинство агрегатов, таких как min и max, будут возвращать ноль, когда представлены с пустым набором строк для работы. Исключением является count () - он (правильно) возвращает 0, когда представлен с пустым набором или строками.
Этот вопрос возник из анализа гораздо более сложного запроса - с несколькими выражениями подзапроса в предложении select. Как оказалось, добавление count (*) в выражение select вызвало некоторый хаос в результатах - так как оно начало возвращать значение, где ничего не ожидалось.
То, что действительно хотел разработчик, - это случай, когда count(*)
будет давать ноль. Самый простой способ добиться этого - использовать аналитику в Oracle. Запрос может быть написан для использования эквивалента аналитического счета: count(*) over ()
select 'abc ' || (select txt from
(select count(*) over (), 'xyz' as txt from dual where 1=2))
from dual