【问题标题】:How to return true if all values in column are true, and false otherwise?如果列中的所有值都为真,如何返回真,否则返回假?
【发布时间】:2021-10-15 18:40:57
【问题描述】:

我有一个带有布尔值的列,并且只想根据整个列的真值返回一个布尔值,例如如果列中的每个条目都为真,则返回真,否则返回假。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql postgresql


【解决方案1】:

Postgres 支持bool_and() 或等效的:

select bool_and(col)
from t;

还有其他方法。例如:

select count(*) filter (where col) = count(*)

【讨论】:

    【解决方案2】:

    不存在假值可以询问PG

    SELECT NOT EXISTS(SELECT null FROM t WHERE NOT boolcolumn);
    

    如果任何值为 false,则子查询将返回至少一行。 EXISTS 将报告 true,将其翻转为 false。唯一的方法是让子查询不返回任何行,只有当所有行都为真时才会发生

    你可能会发现它更合乎逻辑

    SELECT TRUE = ALL (SELECT boolcol FROM t)
    

    【讨论】:

      【解决方案3】:

      试试这个

      Select case when Count(BooleanField)=Sum(BooleanField) then 1 Else 0 End  as Result 
      From MyTable
      

      【讨论】:

        猜你喜欢
        • 2016-05-03
        • 1970-01-01
        • 2012-10-12
        • 2013-06-14
        • 2018-07-29
        • 2022-11-25
        • 2017-04-01
        • 2019-03-10
        • 1970-01-01
        相关资源
        最近更新 更多