我有一个表格,格式如下:

CREATE TABLE segments(id INT, walk BOOLEAN, taxi BOOLEAN, bus BOOLEAN,
     subway BOOLEAN, bike BOOLEAN);

INSERT INTO segments (id, walk, taxi, bus, subway, bike)
VALUES (0,false,false,false,false,true),
(1,true,true,false,false,false),(2,true,false,false,false,false),
(3,true,false,true,false,false),(4,true,true,true,false,false),
(5,false,false,true,false,false),(6,true,true,false,false,false),
(7,true,false,false,false,false),(8,true,false,true,false,false),
(9,true,true,true,false,false),(10,true,false,true,false,false);

SELECT * FROM segments;
id  walk    taxi    bus     subway  bike
0    f       f       f        f      t
1    t       t       f        f      f
2    t       f       f        f      f
3    t       f       t        f      f
4    t       t       t        f      f
5    f       f       t        f      f
6    t       t       f        f      f
7    t       f       f        f      f
8    t       f       t        f      f
9    t       t       t        f      f
10   t       f       t        f      f

但我希望筛选行,其中只有1步行,出租车,公交车,地铁或自行车是真实的,而不是其他.

预期输出:

id  walk    taxi    bus     subway  bike
0    f       f       f        f      t
2    t       f       f        f      f
5    f       f       t        f      f
7    t       f       f        f      f

推荐答案

您可以将boolean转换为postgres中的int:

SELECT *
from segments
where walk::int + taxi::int + bus::int + subway::int + bike::int = 1;
id walk taxi bus subway bike
0 false false false false true
2 true false false false false
5 false false true false false
7 true false false false false

请参见db fiddle.

Sql相关问答推荐

从列的不同值创建列

在多个柱上连接时,如何确定连接条件?

我希望以正确的升序获取SQL结果.怎样才能得到它们?

如何在postgres函数中插入后返回布尔值?

正在try 从SQL获取最新的ID和一个唯一名称

使用多个嵌套数组查询JSON数据

将所有XML文件导入到SQL Server中

是否可以为表中的所有列生成散列值?

如何根据行状态设置正确的标志

缺少日期标识

如何在连接中使用三个不同的列,从而在PostgreSQL中只获得两个列?

如何使子查询在UPDATE语句期间获得最新更新

向表中添加新列取决于表的日期列(unpivot)

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

使用多个数据库调用重载 CQRS 模式

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

PostgreSQL:通过数组的元素从另一个表中 Select 数据,然后按顺序显示

在多个表上递归查找

雅典娜弄错了操作顺序

遍历数据,计算每个月最后三天的总和