PostgreSQL как сгруппировать результаты, чтобы все строки были истинными?

#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
                  )