Обсуждение: strange order by behavior

Поиск
Список
Период
Сортировка

strange order by behavior

От
Jeffrey Melloy
Дата:
I've run across a bug with order by:

select 1 as a order by a;
 -- works

select 1 as a, 2 as b order by a;
 -- works

select 1 as a, 2 as b order by a + b;
ERROR: column "a" does not exist

select * from (select 1 as a, 2 as b) stuff order by a + b;
 -- works

Re: strange order by behavior

От
Tom Lane
Дата:
Jeffrey Melloy <jmelloy@visualdistortion.org> writes:
> I've run across a bug with order by:
> select 1 as a order by a;
>  -- works

> select 1 as a, 2 as b order by a + b;
> ERROR: column "a" does not exist

This isn't a bug, strangely enough.  The "order by output-column-name"
syntax is a holdover from SQL92, in which ORDER BY items could only be
the names or numbers of SELECT output columns.  The new SQL99 theory is
that ORDER BY items are expressions over the input columns, same as the
SELECT output expressions themselves.  We have to walk a fine line in
deciding how much of each spec to support, and the line we've drawn is
that simple names will be sought as output column names, but any
expression more complex than a simple name is an expression over the
input columns.

            regards, tom lane