如何聚合布尔列

chr*_*blo 19 sql oracle

我怎样才能聚合这样的一些元组

COL_1 | COL_2 | COL_3 | COL_4
 val  |   T   |   F   |   F
 val  |   F   |   T   |   F
Run Code Online (Sandbox Code Playgroud)

用OR函数返回下表?

COL_1 | COL_2 | COL_3 | COL_4
 val  |   T   |   T   |   F
Run Code Online (Sandbox Code Playgroud)

jar*_*rlh 21

只需做一个GROUP BY,MAX()如果可用则返回T,否则为F.

select col_1, max(col_2), max(col_3), max(col_4)
from tablename
group by col_1
Run Code Online (Sandbox Code Playgroud)

  • 如果你在Postgres中保留一个布尔值作为字符串,这是有效的,但是`No函数匹配给定的名称和参数类型.如果使用本机布尔列,则可能需要添加显式类型转换.在这种情况下,您应该使用`bool_or`作为另一个答案建议. (3认同)
  • @philpirozhkov,示例数据看起来像 char(1) 列,其中 T 或 F 作为值。由于 T > F,查询将按预期工作。OP 使用 Oracle 那么为什么我应该使用 Postgres 特定功能?顺便说一句,ANSI SQL 指定 TRUE > FALSE。 (2认同)

Cit*_*ito 10

正如旁注(不适用于Oracle):在PostgreSQL中,您可以这样做:

select col_1, bool_or(col_2), bool_or(col_3), bool_or(col_4)
from tablename group by col_1 order by col_1
Run Code Online (Sandbox Code Playgroud)