#sql #postgresql #subquery #aggregate-functions
#sql #postgresql #подзапрос #агрегатные функции
Вопрос:
В PostgreSQL у меня есть запрос, который может возвращать 1 или более строк логического значения. Как я могу запустить запрос select для этого результирующего набора, чтобы получить одно логическое значение, которое возвращает true, если все строки true? Возвращает false, если одна или несколько строк в этом наборе результатов имеют значение false.
Ответ №1:
Вы описываете логическую агрегацию, для которой Postgres предлагает встроенные функции, такие как bool_or()
и bool_and()
:
select bool_and(mybool) as myresult
from (
--- your query, that returns a boolean column called "mybool"
) t
Комментарии:
1. как мне запустить это в pgAdmin? Куда девается «mybool»? у вас есть какой-нибудь пример?
2. Я понял это. mybool — это результат моего запроса. похоже, это работает! Да!
3. @user840930: да. Вы не показали свой запрос, поэтому я не могу предоставить полное решение.
4. Я понимаю. mybool идет в конце select и перед предложением from .
Ответ №2:
Это может быть быстрее использовать not exists
:
select not exists (select 1
from <your query>
where not mybool
)