упорядочить с умножением произвольного имени в скобках не удалось - PullRequest
0 голосов
/ 11 июля 2019

Сбой при вводе имени столбца в скобках:

select id as "gid", coalesce(name, 'apple') as "name" 
from test 
order by ("gid", "name") desc

И я хочу, чтобы приведенный выше код достиг того же результата, что и этот:

select id as "gid", coalesce(name, 'apple') as "name" 
from test 
order by (id, name) desc;

И это будет работатьхорошо с:

select id as "gid", coalesce(name, 'apple') as "name" 
from test 
order by "gid" desc, "name" desc

Так почему же Postgres не может найти "gid"?И order by (a, b) такой же, как order by a,b?

Вот мое создание sql:

CREATE TABLE test ( "id" serial NOT NULL, "name" text NOT NULL, PRIMARY KEY ("id") );
INSERT INTO test (name) VALUES ('Apple');
INSERT INTO test (name) VALUES ('Orange'); 
INSERT INTO test (name) VALUES ('Pear');

1 Ответ

1 голос
/ 11 июля 2019

Postgres разрешает ссылки на столбцы в ORDER BY.

Однако он не допускает выражений для ссылок на столбцы. Скобки превращают ключи ORDER BY в выражение, в частности, в которое создается анонимная запись.

Если вы хотите сделать это, вы можете использовать боковое соединение для определения столбцов:

select v.*
from test t cross join lateral
     (values (id, coalesce(name, 'apple'))) v("gid", "name") 
order by (v."gid", v."name") desc;

Псевдонимы необходимы в order by только потому, что "name" определено в обеих таблицах.

...