You can use unnest in your SELECT, for example:
select whatever, (select sum(case b when 't' then 1 else 0 end) from unnest(userconfirm) as dt(b)) from your_table
For example, given this:
=> select * from bools; id | bits ----+-------------- 1 | {t,t,f} 2 | {t,f} 3 | {f,f} 4 | {t,t,t} 5 | {f,t,t,NULL}
You will receive the following:
=> select id, (select sum(case b when 't' then 1 else 0 end) from unnest(bits) as dt(b)) as trues from bools; id | trues ----+------- 1 | 2 2 | 1 3 | 0 4 | 3 5 | 2
If this is too ugly, you can write a function:
create function count_trues_in(boolean[]) returns bigint as $$ select sum(case b when 't' then 1 else 0 end) from unnest($1) as dt(b) $$ language sql;
and use it for your request:
=> select id, count_trues_in(bits) as trues from bools; id | trues ----+------- 1 | 2 2 | 1 3 | 0 4 | 3 5 | 2
source share