Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 086EA6340BB for ; Thu, 23 Jul 2009 05:23:44 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 49206-07 for ; Thu, 23 Jul 2009 05:23:33 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail-yx0-f180.google.com (mail-yx0-f180.google.com [209.85.210.180]) by mail.postgresql.org (Postfix) with ESMTP id 8ADE16342EC for ; Thu, 23 Jul 2009 05:23:30 -0300 (ADT) Received: by yxe10 with SMTP id 10so1255447yxe.15 for ; Thu, 23 Jul 2009 01:23:29 -0700 (PDT) MIME-Version: 1.0 Received: by 10.231.19.77 with SMTP id z13mr663654iba.49.1248337409474; Thu, 23 Jul 2009 01:23:29 -0700 (PDT) In-Reply-To: <4A67EEB2.1070302@gmx.net> References: <4A67EEB2.1070302@gmx.net> Date: Thu, 23 Jul 2009 04:23:29 -0400 Message-ID: Subject: Re: Need magical advice for counting NOTHING From: Glenn Maynard To: pgsql-sql Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=-10 required=5 tests=none X-Spam-Level: X-Archive-Number: 200907/117 X-Sequence-Number: 32858 On Thu, Jul 23, 2009 at 1:01 AM, Andreas wrote: > SELECT user_name, log_type_fk, COUNT(log_type_fk) > FROM log > JOIN users ON (user_id =3D user_fk) > WHERE (ts IS BETWEEN =C2=A0sometime =C2=A0AND =C2=A0 another) > GROUP BY user_name, log_type_fk > ORDER BY user_name, log_type_fk create table users (user_id integer, user_name varchar); create table log_type (log_type_id integer, log_type integer); create table log (log_id integer, log_type_fk integer, user_fk integer); insert into log_type (log_type_id, log_type) values (1, 1); insert into log_type (log_type_id, log_type) values (2, 2); insert into users (user_id, user_name) values (1, 'a'); insert into users (user_id, user_name) values (2, 'b'); insert into log (log_id, log_type_fk, user_fk) values (1, 1, 1); insert into log (log_id, log_type_fk, user_fk) values (2, 2, 1); insert into log (log_id, log_type_fk, user_fk) values (3, 2, 1); insert into log (log_id, log_type_fk, user_fk) values (4, 1, 2); SELECT user_name, log_type.log_type, sum((log_type_fk IS NOT NULL)::integer) AS count FROM users JOIN log_type ON (true) LEFT JOIN log ON (user_id =3D user_fk AND log.log_type_fk =3D log_type.log_type) GROUP BY user_name, log_type.log_type ORDER BY user_name, log_type.log_type; user_name | log_type | count -----------+----------+------- a | 1 | 1 a | 2 | 2 a | 3 | 0 b | 1 | 1 b | 2 | 0 b | 3 | 0 --=20 Glenn Maynard