Как скрыть строки, в которых используются агрегатные функции

#sql #aggregate-functions

#sql #агрегатные функции

Вопрос:

давайте представим, что вот мой отчет:

 select 1 from dual
union all
select 2 from dual
union all
select 3 from dual
union all
select 4 from dual
 

Вывод:

 1
2
3
4
 

Если, например, я хочу скрыть часть отчета простым способом, я просто добавляю 1 = 2 в предложение where:

 select 1 from dual
union all
select 2 from dual
union all
select 3 from dual where 1 = 2
union all
select 4 from dual
 

Вывод:

 1
2
4
 

Круто! Однако, когда select использует агрегатные функции, этот трюк не помогает. Строка генерируется в любом случае:

 select 1 from dual
union all
select 2 from dual
union all
select max(3) from dual where 1 = 2
union all
select 4 from dual
 

Вывод:

 1
2
(null)
4
 

Может быть, кто-нибудь знает простой и легкий способ скрыть такие строки?

Ответ №1:

Запрос агрегации без no group by всегда возвращает ровно одну строку — даже если никакие строки не агрегируются.

Вы хотите фильтровать после агрегации, поэтому используйте having :

 select max(3) from dual having 1 = 2