Thread: Parsing bug?

Parsing bug?

From
Mike Nolan
Date:
In the following query the field 'memid' is varchar(8).

Is the error message below a bug?

select substr(memid,1,1) as memtp, substr(memid,2,4) as newx
from memmast group by memtp, newx

ERROR:  column "memmast.memid" must appear in the GROUP BY clause or be used in
an aggregate function
--
Mike Nolan


Re: Parsing bug?

From
Mike Nolan
Date:
> Doesn't look like a bug to me.  As far as I know only aggregation functions
> can occur in a select with group by for columns that are not in the group by
> clause.

I left out the 'count(*)' column, because the query fails with or without it.

The reason I think it may be an error is that if I include either of the
columns it works, but not if I include both of them.

To recap, the first two queries below work, the third does not:

OK:    select substr(memid,1,1) as memtp, count(*) from memmast
       group by memtp

OK:    select substr(memid,2,4) as newx, count(*) from memmast
       group by newx

FAIL:  select substr(memid,1,1) as memtp, substr(memid,2,4) as newx,
       count(*) from memmast group by memtp, newx
--
Mike Nolan




Re: Parsing bug?

From
Tom Lane
Date:
Mike Nolan <nolan@gw.tssi.com> writes:
> Is the error message below a bug?

> select substr(memid,1,1) as memtp, substr(memid,2,4) as newx
> from memmast group by memtp, newx

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

Works for me in every branch back to 7.1 ... what version are you using?

regression=# create table memmast (memid varchar(8));
CREATE
regression=# select substr(memid,1,1) as memtp, substr(memid,2,4) as newx, count(*) from memmast group by memtp, newx;
 memtp | newx | count
-------+------+-------
(0 rows)


            regards, tom lane

Re: Parsing bug?

From
Mike Nolan
Date:
> Works for me in every branch back to 7.1 ... what version are you using?

7.4.1, but I figured out what I did wrong.  The alias for the first
column turns out to be the same as the name of another column in the table.
--
Mike Nolan