Thread: group by error message?

group by error message?

From
Louis-David Mitterrand
Date:
Hi,

Running this query:

    critik=# select distinct pt.type_fr,sum(e2.id_event) from person_type pt natural join person_to_event join event e
using(id_event) LEFT JOIN event e2 ON e.id_event = e2.id_event AND e2.id_event=219 join event_type et ON
e.id_event_type= et.id_event_type where et.type_fr='théâtre' GROUP BY pt.type_fr IS NULL; 

gives this error:

    ERROR:  column "pt.type_fr" must appear in the GROUP BY clause or be used in an aggregate function

But pt.type_fr is _already_ in the group by.

When adding e2.id_event however ("GROUP BY pt.type_fr,e2.id_event") it works.

Did I miss something there?

Re: group by error message?

From
Tom Lane
Date:
Louis-David Mitterrand <vindex+lists-pgsql-general@apartia.org> writes:
>     critik=# select distinct pt.type_fr,sum(e2.id_event) from person_type pt natural join person_to_event join event
eusing (id_event) LEFT JOIN event e2 ON e.id_event = e2.id_event AND e2.id_event=219 join event_type et ON
e.id_event_type= et.id_event_type where et.type_fr='th��tre' GROUP BY pt.type_fr IS NULL; 

> gives this error:

>     ERROR:  column "pt.type_fr" must appear in the GROUP BY clause or be used in an aggregate function

> But pt.type_fr is _already_ in the group by.

No, "pt.type_fr IS NULL" is in the group by.  That doesn't ensure that
each group has a unique value of pt.type_fr itself.

            regards, tom lane

Re: group by error message?

From
Louis-David Mitterrand
Date:
On Thu, Sep 25, 2008 at 11:01:08AM -0400, Tom Lane wrote:
> Louis-David Mitterrand <vindex+lists-pgsql-general@apartia.org> writes:
> >     critik=# select distinct pt.type_fr,sum(e2.id_event) from person_type pt natural join person_to_event join
evente using (id_event) LEFT JOIN event e2 ON e.id_event = e2.id_event AND e2.id_event=219 join event_type et ON
e.id_event_type= et.id_event_type where et.type_fr='théâtre' GROUP BY pt.type_fr IS NULL; 
>
> > gives this error:
>
> >     ERROR:  column "pt.type_fr" must appear in the GROUP BY clause or be used in an aggregate function
>
> > But pt.type_fr is _already_ in the group by.
>
> No, "pt.type_fr IS NULL" is in the group by.  That doesn't ensure that
> each group has a unique value of pt.type_fr itself.

Oops, once more I jumped the gun a bit too fast. Thanks for catching it
Tom!

Best regards,