#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