Почему запрос с агрегатами возвращает результат, если он имеет ложный предикат? Есть ли способ не получить результат? - PullRequest
0 голосов
/ 17 апреля 2020

Почему этот запрос возвращает набор результатов?

SELECT SomeString = 'Total', SUM (1) WHERE 1 = 2

У меня похожий запрос, поскольку предикат имеет значение false Я предполагал, что это не должно возвращать результат. Это предназначено? Если так, как я могу не получить результат, возвращаемый запросом?

1 Ответ

1 голос
/ 17 апреля 2020

Агрегированные запросы всегда возвращают по одной строке на группу, а без GROUP BY возвращают одну строку.

Если вы не хотите возвращать строку, вы можете использовать неагрегированный запрос, например

SELECT SomeString = 'Total', 
       SUM(1) over() total
WHERE 1 = 2

или подзапрос типа

with q as 
(
    SELECT SomeString = 'Total', SUM(1) total
    WHERE 1 = 2
)
select *
from q
where total is not null
...