繁体   English   中英

PostgreSQL:计算列中真值的出现次数

[英]PostgreSQL: count occurrence of true values in columns

我有下表:

CREATE TABLE trips(
     trip_id int,
     true_foot boolean,
     true_bike boolean,
     true_bus boolean,
     true_car boolean,
     true_metro boolean
)

INSERT INTO trips (trip_id,true_foot,true_bike,true_bus,true_car,true_metro) 
VALUES 
  (563097,'t','f','f','f','f'),
  (596303,'f','f','f','t','f'),
  (595648,'f','f','f','t','f'),
  (566061,'t','f','f','f','f'),
  (566753,'t','f','f','f','f'),
  (561179,'t','f','f','f','f'),
  (535519,'f','f','f','f','f'),
  (548460,'t','f','f','f','f'),
  (543477,'f','f','f','t','f'),
  (540797,'t','f','f','f','f')

一行中只有一列具有真值(或没有)。 然后我想计算步行、自行车、公共汽车等的所有真实值......

SELECT 
 COUNT(*) FILTER (WHERE true_foot IS TRUE ) AS 'walk',
 COUNT(*) FILTER (WHERE true_bike IS TRUE ) AS 'bike',
 COUNT(*) FILTER (WHERE true_bus IS TRUE) AS 'bus',
 COUNT(*) FILTER (WHERE true_car IS TRUE) AS 'car',
 COUNT(*) FILTER (WHERE true_metro IS TRUE) AS 'metro'
     
FROM trips

ERROR:  syntax error at or near "'walk'"
LINE 3:  COUNT(*) FILTER (WHERE true_foot IS TRUE ) AS 'walk',

单引号只能用于字符串和日期常量。 你不需要它们,所以删除它们。

还有, is true其实是多余的。 所以:

SELECT COUNT(*) FILTER (WHERE true_foot) AS walk,
       COUNT(*) FILTER (WHERE true_bike) AS bike,
       COUNT(*) FILTER (WHERE true_bus) AS bus,
       COUNT(*) FILTER (WHERE true_car) AS car,
       COUNT(*) FILTER (WHERE true_metro) AS metro
FROM trips;
 

我喜欢为此使用SUM() 您只需要将布尔值转换为 integer 值( true变为1false变为0 )。

SELECT 
    SUM( (true_food)::int )  AS walk,
    SUM( (true_bike)::int )  AS bike,
    SUM( (true_bus)::int )   AS bus,
    SUM( (true_car)::int )   AS car,
    SUM( (true_metro)::int ) AS metro
FROM trips

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM