PostgreSQL如何对结果进行分组以使所有行都必须为真?

Posted

技术标签:

【中文标题】PostgreSQL如何对结果进行分组以使所有行都必须为真?【英文标题】:PostgreSQL how to group results so all rows must be true? 【发布时间】:2021-04-06 12:43:56 【问题描述】:

在 PostgreSQL 中,我有一个可以返回 1 行或多行布尔值的查询。如果所有行都为真,我如何针对此结果集运行选择查询以获取返回真的单个布尔值?如果此结果集中的一行或多行为 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

【讨论】:

如何在 PgAdmin 中运行它? “mybool”去哪儿了?你有例子吗? 我明白了。 mybool 是我查询的结果。它看起来像它的作品!是的! @user840930:是的。您没有显示您的查询,因此我无法提供完整的解决方案。 我明白了。 mybool 位于 select 的末尾和 from 子句之前。【参考方案2】:

使用not exists可能会更快:

select not exists (select 1
                   from <your query>
                   where not mybool
                  )

【讨论】:

以上是关于PostgreSQL如何对结果进行分组以使所有行都必须为真?的主要内容,如果未能解决你的问题,请参考以下文章