Thread: column alias and group by/having/order

column alias and group by/having/order

From
Tomasz Myrta
Date:
Hi
I found some strange column alias behaviour:

select val1+val2 as val
from some_table
group by val;

result - OK

select val1+val2 as val
from some_table
order by val;

result - OK

select val1+val2 as val
from some_table
group by val having val1+val2>1;

result - OK

select val1+val2 as val
from some_table
group by val having val>1;
ERROR:  Attribute "val" not found

Is it a bug or a feature?

Regards,
Tomasz Myrta

----------------------------------------------------------------------------------------------------------------
PostgreSQL7.3.4 on i386-pc-linux-gnu, compiled by GCC i386-linux-gcc 
 
(GCC) 3.3.2 20031005 (Debian prerelease)


Re: column alias and group by/having/order

From
Rod Taylor
Date:
> select val1+val2 as val
> from some_table
> group by val having val>1;
> ERROR:  Attribute "val" not found
> 
> Is it a bug or a feature?

It's a mis-feature that group by accepts aliases of the select list.

Having is proper.




Re: column alias and group by/having/order

From
Tom Lane
Date:
Tomasz Myrta <jasiek@klaster.net> writes:
> I found some strange column alias behaviour:

That's how it is.  The fact that you can reference output-column aliases
at all in GROUP BY or ORDER BY is a wart, because it conflicts with the
logical model of query evaluation --- the output list should be computed
last.  We have extended the SQL92 requirement (unadorned aliases in
ORDER BY) to allow the same in GROUP BY, but we don't take it to the
level of allowing them inside arbitrary expressions.
        regards, tom lane