Sql 跨多个列处理布尔值
在花了数周时间对我的数据集进行分析之后,我逐渐意识到一些可疑的事情,实际上可能会影响我分析的准确性(太糟糕了) 在我的表Sql 跨多个列处理布尔值,sql,postgresql,count,aggregate-functions,Sql,Postgresql,Count,Aggregate Functions,在花了数周时间对我的数据集进行分析之后,我逐渐意识到一些可疑的事情,实际上可能会影响我分析的准确性(太糟糕了) 在我的表segments中,包含了按用户出行模式划分的用户出行段,因此每个段在其相应的出行模式上都有真实值,我意识到一些段实际上在多个出行模式下都有真实值。这可能是来自用户注释的错误,例如: SELECT trip_id, segment_id, true_foot, true_bike, true_bus, true_car, true_metro FROM segments W
segments
中,包含了按用户出行模式划分的用户出行段,因此每个段在其相应的出行模式上都有真实值,我意识到一些段实际上在多个出行模式下都有真实值。这可能是来自用户注释的错误,例如:
SELECT trip_id, segment_id, true_foot, true_bike, true_bus, true_car, true_metro
FROM segments
WHERE trip_id=533888 limit 10;
trip_id | segment_id | true_foot | true_bike | true_bus | true_car | true_metro
---------+------------+-----------+-----------+----------+----------+------------
533888 | 55 | t | f | f | t | f
533888 | 53 | t | f | f | t | f
533888 | 51 | t | f | f | t | f
533888 | 49 | t | f | f | t | f
533888 | 47 | t | f | f | t | f
533888 | 45 | t | f | f | t | f
533888 | 43 | t | f | f | t | f
533888 | 41 | t | f | f | t | f
533888 | 37 | t | f | f | t | f
533888 | 35 | t | f | f | t | f
(10 rows)
在这种情况下,对foot
和car
模式的段进行了注释
我别无选择,只能:
如何获得具有多个行程模式的段数?您可以将
布尔值转换为整数,然后在多个列中计算具有真值的行数:
select count(*)
from segments
where (true_foot::integer + true_bike::integer + true_bus::integer + true_car::integer + true_metro::integer) > 1
您可以将布尔值
强制转换为整数
,然后在多个列中计算具有true
的行:
select count(*)
from segments
where (true_foot::integer + true_bike::integer + true_bus::integer + true_car::integer + true_metro::integer) > 1
也许只有我一个人,但我发现布尔列的前缀true
非常令人困惑。我通常会根据它实际包含的内容来选择is\u
或was\u
或has\u
,可能只是我自己,但我发现布尔列的前缀true\u
非常令人困惑。我通常会根据实际情况选择is\u
或was\u
或has\u
contains@horse_with_no_name但它必须至少是2Ah,我没有看到。@horse_没有名字,但它必须至少是2Ah,我没有看到。