X-Original-To: pgsql-sql-postgresql.org@postgresql.org Received: from localhost (mx1.hub.org [200.46.208.251]) by postgresql.org (Postfix) with ESMTP id 3773A9FB1EB for ; Fri, 7 Jul 2006 11:54:21 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.208.251]) (amavisd-new, port 10024) with ESMTP id 14242-01-2 for ; Fri, 7 Jul 2006 11:54:16 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey- Received: from amanda.contactbda.com (ipn36372-e65122.cidr.lightship.net [216.204.66.226]) by postgresql.org (Postfix) with ESMTP id 647B29FB201 for ; Fri, 7 Jul 2006 11:54:10 -0300 (ADT) Received: from amanda.contactbda.com (amanda.contactbda.com [192.168.1.2]) by amanda.contactbda.com (8.12.11/8.12.11/Debian-3) with ESMTP id k67Es7PR019910; Fri, 7 Jul 2006 10:54:07 -0400 From: "Jim Buttafuoco" To: "James Moliere" , Reply-To: jim@contactbda.com Subject: Re: create aggregate function 'count_bool( column_name, boolean )' Date: Fri, 7 Jul 2006 10:54:07 -0400 Message-Id: <20060707145216.M76744@contactbda.com> In-Reply-To: <005b01c6a1cc$c43de9b0$0302a8c0@intelesis.org> References: <005b01c6a1cc$c43de9b0$0302a8c0@intelesis.org> X-Mailer: Open WebMail 2.41 20040926 X-OriginatingIP: 192.168.1.1 (jim) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200607/101 X-Sequence-Number: 25675 James, I know Postgresql doesn't have 2 arg aggregate functions. what you could do is the following (untested) select distict product_id, sum(case when purchased then 1 else 0 end) as purchased, sum(case when was_selected then 1 else 0 end) as was_selected from some_table group by product_id; Jim ---------- Original Message ----------- From: "James Moliere" To: Sent: Fri, 7 Jul 2006 06:53:45 -0700 Subject: [SQL] create aggregate function 'count_bool( column_name, boolean )' > Hello, > I'd like to create a function called count_bool( column_name, boolean ) in > PostgreSQL. > > this function is similar to the count( column_name ) function but will only > count the trues or falses based on the other input parameter boolean. e.g. > if you pass in a 'true', all the trues will be counted but not the falses -- > it's the same but opposite if the 'false' was passed in. > > I'd like this aggregate function to be developed with the SQL language > instead of 'C' (for maintenance reasons). From the surface, it appears to > be an incredibly simple job only to find that it's difficult. > > In some respects, I can't believe this function doesn't exist in SQL > > so now I can create the statement > select distict product_id, count_bool(purchased, true), > count_bool(was_selected, true) from some_table group by product_id; > > instead of breaking the query into 3 seperate queries > > select distict product_id from some_table; > select count(purchased) from product_id where purchased = true; > select count(was_selected) from some_table where was_selected = true; > > Am I missing a detail with SQL based aggregate function development? > > Any help would be appreciated. > > Thanks! ------- End of Original Message -------