SQL subquery (count distinct) - Any Ideas?

From: "Matt Fulford" <mtfulford(at)yahoo(dot)co(dot)uk>
To: pgsql-sql(at)postgresql(dot)org
Subject: SQL subquery (count distinct) - Any Ideas?
Date: 2005-04-13 17:28:36
Message-ID: Wzmdnb1DKJVDy8DfSa8jmA@karoo.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I'm trying to write a query to return the number of different customers
called on a single day. The database has a table called 'user', a table
called 'caller_session' which references a 'user' record, and a table called
'call' which references a 'caller_session'. This is my current attempt:

select
user.name,
sum((select count(distinct call.customer_id) from call where
call.caller_session_id=cs.caller_session_id)) as contacted
from user, caller_session cs
where cs.user_id=user.user_id
and date(cs.session_date) = date('2005-04-13')
group by user.name;

I get back a list of names and a call count (as desired), but the count is
not correct! The subqery is counting the number of different customers
called for each caller_session, and summing them based on the user.name
field. If the same customer is called in 2 different sessions, this is
being counted as 2 customers, but should be 1!

The 'contacted' count calculation has to be in a subquery as above, because
there are other subqueries after this one to calculate other data based on
the outer query (the outer query has to be as it is here). Not quite sure
where the sum, count and distinct should really go to get the required
results!

Any help greatly appreciated!

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Ezequiel Tolnay 2005-04-14 09:20:23 Re: SQL group select question
Previous Message Kai Hessing 2005-04-13 13:44:25 can a function return a virtual table?