X-Original-To: pgsql-sql@postgresql.org Received: from spampd.localdomain (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id C86734762A2 for ; Fri, 11 Apr 2003 18:12:08 -0400 (EDT) Received: from megazone.bigpanda.com (megazone.bigpanda.com [63.150.15.178]) by postgresql.org (Postfix) with ESMTP id 615BA475F5F for ; Fri, 11 Apr 2003 18:12:07 -0400 (EDT) Received: by megazone.bigpanda.com (Postfix, from userid 1001) id 8818ED605; Fri, 11 Apr 2003 15:12:09 -0700 (PDT) Received: from localhost (localhost [127.0.0.1]) by megazone.bigpanda.com (Postfix) with ESMTP id 7DD365C0B; Fri, 11 Apr 2003 15:12:09 -0700 (PDT) Date: Fri, 11 Apr 2003 15:12:09 -0700 (PDT) From: Stephan Szabo To: Itai Zukerman Cc: Subject: Re: count(*), EXISTS, indexes In-Reply-To: <87smsora9b.fsf@matt.w80.math-hat.com> Message-ID: <20030411150926.C838-100000@megazone23.bigpanda.com> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam-Status: No, hits=-25.8 required=5.0 tests=BAYES_00,EMAIL_ATTRIBUTION,IN_REP_TO,QUOTED_EMAIL_TEXT, QUOTE_TWICE_1,REPLY_WITH_QUOTES,UPPERCASE_25_50 autolearn=ham version=2.50 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp) X-Archive-Number: 200304/190 X-Sequence-Number: 12891 On Fri, 11 Apr 2003, Itai Zukerman wrote: > > CREATE TABLE A (x int PRIMARY KEY, real v); > > CREATE TABLE B (x int); > > > > I'd like to calculate: > > > > SELECT sum(v) FROM A WHERE EXISTS (SELECT 1 FROM B WHERE A.x=B.x); > > This seems to be a reasonably-performing workaround: > > SELECT DISTINCT x INTO TEMP C FROM A,B WHERE A.x=B.x; > SELECT sum(v) FROM A,C WHERE A.x=C.x; Hmm, given that, would something like: select sum(v) from (select distinct on(x) x,v from a,b where a.x=b.x) as foo; work?