Thread: Count
I have a table with four columns that will either be null or hold the value 'true'. I want to obtain the count of these columns, within a particular row, that have 'true' as a value (0 to 4). I have attempted the Select count method but it seems that I need something more. If anyone has any thoughts it would be much appreciated. Bob
Bob Pawley wrote: > I have a table with four columns that will either be null or hold the > value 'true'. > > I want to obtain the count of these columns, within a particular row, > that have 'true' as a value (0 to 4). > > I have attempted the Select count method but it seems that I need > something more. > > If anyone has any thoughts it would be much appreciated. > > Bob Something like this? create table t (id int, w bool, x bool, y bool, z bool); insert into t values (1,null,null,'t','t'), (1,null,'t','t',null), (2,'t',null,'t',null), (2,'t',null,'t',null), (3,null,'t','t','t'), (4,'t','t','t','t'); select id, sum(case when w is null then 0 else 1 end) as w, sum(case when x is null then 0 else 1 end) as x, sum(case when y is null then 0 else 1 end) as y, sum(case when z is null then 0 else 1 end) as z from t group by id order by id; id | w | x | y | z ----+---+---+---+--- 1 | 0 | 1 | 2 | 1 2 | 2 | 0 | 2 | 0 3 | 0 | 1 | 1 | 1 4 | 1 | 1 | 1 | 1 ?
On Wed, 2008-01-23 at 10:50 -0800, Bob Pawley wrote: > I have a table with four columns that will either be null or hold the value > 'true'. > > I want to obtain the count of these columns, within a particular row, that > have 'true' as a value (0 to 4). > > I have attempted the Select count method but it seems that I need something > more. > > If anyone has any thoughts it would be much appreciated. 1. what did you do? 2. what did you see? 3. what did you expect? Regards, Jeff Davis
Bob Pawley wrote: > I have a table with four columns that will either be null or hold the > value 'true'. Any reason why the NULL values aren't instead FALSE? NULL != FALSE. > I want to obtain the count of these columns, within a particular row, > that have 'true' as a value (0 to 4). SELECT (CASE WHEN t.col1 = TRUE THEN 1 ELSE 0 END) + (CASE WHEN t.col2 = TRUE THEN 1 ELSE 0 END) + (CASE WHEN t.col3 = TRUE THEN 1 ELSE 0 END) + (CASE WHEN t.col4 = TRUE THEN 1 ELSE 0 END) AS true_count FROM your_table AS t; I'm sure there's a more clever way than that, though. > I have attempted the Select count method but it seems that I need > something more. That would only be useful if you were counting across rows (aggregating). b
> -----Original Message----- > From: pgsql-general-owner@postgresql.org > [mailto:pgsql-general-owner@postgresql.org]On Behalf Of Bob Pawley > Sent: 23 janvier 2008 13:51 > To: PostgreSQL > Subject: [GENERAL] Count > > > I have a table with four columns that will either be null or hold the value > 'true'. > > I want to obtain the count of these columns, within a particular row, that > have 'true' as a value (0 to 4). > > I have attempted the Select count method but it seems that I need something > more. > > If anyone has any thoughts it would be much appreciated. > > Bob > Or something like this ? create table test ( id_test serial, c1 boolean, c2 boolean, c3 boolean, c4 boolean ); insert into test (c1,c2,c3,c4) values ( true, null, null, true),( true, true, null, true),( null, null, null, null); select id_test, (case when c1 is null then 0 else 1 end)+(case when c2 is null then 0 else 1 end)+(case when c3 is null then 0 else 1 end)+(case when c4 is null then 0 else 1 end) as total from test; id_test | total ---------+------- 1 | 2 2 | 3 3 | 0 Regards, Charles Simard