PostgreSQL中的选择或布尔聚合函数

Posted

技术标签:

【中文标题】PostgreSQL中的选择或布尔聚合函数【英文标题】:Select or boolean aggregate function in PostgreSQL 【发布时间】:2011-04-12 01:47:37 【问题描述】:

我想问你如何在 PostgreSQL 中使用选择或聚合函数检查表列中的布尔值之一是否为真?

【问题讨论】:

【参考方案1】:

您可以使用几个布尔特定的aggregate functions:bool_andbool_orevery

在您的特定情况下,您需要 bool_or 聚合。 查询就这么简单:

SELECT bool_or(my_column) FROM my_table

【讨论】:

【参考方案2】:

要知道是否至少有1个真值:

select sum(cast(data as int)) > 0

这比exists解决方案更好,因为它可以嵌入到更大的查询中,可能包含group by和其他where子句

【讨论】:

【参考方案3】:

您不能使用 SUM(DATA),但可以将值(见下文)转换为 int(0=false,1=true)。但是,使用 EXISTS(...) 可能更有效,特别是如果您对 TRUE 值的数量不感兴趣。

create table test(data boolean);
insert into test values(true), (false);
select sum(cast(data as int)) from test;
select exists(select * from test where data);

【讨论】:

准确地说:select exists(select * from test where data='true');有用!感谢您的回复。

以上是关于PostgreSQL中的选择或布尔聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

postgreSQL 选择聚合函数中未使用的附加列

具有分组依据的 PostgreSQL 聚合函数

选择列表中的无效表达式(不包含在聚合函数或 GROUP BY 子句中)

SQL:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中[关闭]

Postgresql - 窗口函数聚合

37.12. User-Defined Aggregates