On Sat, Apr 9, 2016 at 6:37 AM, Hector Bejarano <hector.bejarano@gmail.com>
wrote:
> Right, this explains the how but not the why, which is really my question=
.
> For instance, there are other statements I can use with this derived colu=
mn
> like a group by:
>
> select 1 as a group by a
>
> But then if I try to use "having" then it fails just like it does with th=
e
> WHERE clause:
>
> select 1 as a group by a having a=3D1
>
> See, the thing here is I don't understand WHY it was designed this way,
> because to me it would be very useful to have the ability to use the
> derived column without having to wrap the whole thing in a derived query.
>
>
=E2=80=8BTom answered the why a long time ago:
Google: postgresql having not using alias
http://www.postgresql.org/message-id/7608.1259177709@sss.pgh.pa.us
Basically, it shouldn't work for GROUP BY but it does so we live with it.
The difference is that in GROUP BY all you are referring to is an alias
(grouping_element) while in HAVING you are using it in an expression
(condition)
http://www.postgresql.org/docs/current/static/sql-select.html#SQL-HAVING
Its not any different than the fact you can say: "GROUP BY 1, 2" but
saying "1 =3D 'alpha'" in the HAVING clause would downright confusing.
David J.
> On Fri, Apr 8, 2016 at 4:53 PM, Phillip Couto <phillip.couto01@gmail.com>
> wrote:
>
>> The WHERE is executed before the SELECT. The value of a is not available
>> to the WHERE clause as it is assigned at the end of the query.
>>
>> To actually make your query work it would have to read:
>> select * from (select 1 as a) as b where a =3D 1
>>
>> The from provides the data that the where will operate on, the select
>> then determines what to be returned.
>>
>> On Fri, 8 Apr 2016 at 18:41 <hector.bejarano@gmail.com> wrote:
>>
>>> The following bug has been logged on the website:
>>>
>>> Bug reference: 14079
>>> Logged by: Hector Bejarano
>>> Email address: hector.bejarano@gmail.com
>>> PostgreSQL version: 9.5.0
>>> Operating system: Ubuntu 14
>>> Description:
>>>
>>> This query works:
>>> select 1 as a
>>>
>>> But this one fails:
>>> select 1 as a where a =3D 1
>>>
>>> And I think they should both work.
>>>
>>> Regards,
>>> Hector.
>>>
>>>
>>> --
>>> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
>>> To make changes to your subscription:
>>> http://www.postgresql.org/mailpref/pgsql-bugs
>>>
>>
>