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如何对结果进行分组以使所有行都必须为真?的主要内容,如果未能解决你的问题,请参考以下文章

如何在AngularJS ui-grid中对分组行进行排序?

如何格式化行以按第 1 列中的类似值进行颜色分组

如何根据多列的顺序对 PostgreSQL 中的聚合进行分组?

查询优化 PostgreSQL (GreenPlum)。根据排名前 5 位的结果进行分组

PostgreSQL 调用所有数据进行分组限制操作

在 PostgreSQL 上以正确的顺序对数组元素进行分组