On Fri, Jul 7, 2017 at 3:49 AM, Patrick B <patrickbake...@gmail.com> wrote:

> I want this to work:
>
> WITH account_status AS (
> select
> CASE
>   WHEN regdate = 1 THEN 'yes'
>   WHEN regdate = 2 THEN 'no'
> end as status_a,
> count(t2.id) as t2_count
>   from test1 as t1
> join test2 as t2 on t2.test1_id = t1.id
>   end as status_a
> )
>
> select
> status_a,
> t2_count,
> count(*)
> from account_status group by status_a, t2_count
>
>
​Usually aggregates and joins introduce the possibility of
double-counting.  Generally the simplest way is to write three queries.

WITH agg1 AS (),
agg2 AS ()
SELECT (SELECT agg1.result) AS ...,
(SELECT agg2.result) ...;

Depending on the data you can sometimes be a bit more efficient by doing:

SELECT agg(DISTSINCT col) AS ...

If since the distinct portion would remove the inherent duplication being
introduced by the join.

David J.

Reply via email to