Lists: | Postg토토 사이트 추천SQL |
---|
From: | "Sergey Konoplev" <gray(dot)ru(at)gmail(dot)com> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Динамический набор выражений в "order by" |
Date: | 2007-11-21 15:54:30 |
Message-ID: | c3a7de1f0711210754n444482f7n3aa8394600dbbb61@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Привет,
Есть процедура, принимающая какие-то аргументы. Аргументы должны
влиять на набор выражений "order by" одного из запросов. Например: в
одном случае сортировка по полям 1, 2 (desc) и 3, а в другом по 3, 1 и
2, а в третьем только по 2 и 3.
Есть ли решение позволяющее сделать это без использования
динамического SQL или дублирования кода?
--
Regards,
Sergey Konoplev
From: | Заяц Алексей <az(at)antora(dot)ru> |
---|---|
To: | Sergey Konoplev <gray(dot)ru(at)gmail(dot)com> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Динамический набор выражений в "order by" |
Date: | 2007-11-21 16:38:08 |
Message-ID: | 47445EF0.2020305@antora.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | pgsql-ru-general |
Привет, Сергей.
select id from topic order by ( case when 1=2 then title else name end );
в таком варианту нужно чтобы выражения внутри case были одно типа.
Sergey Konoplev пишет:
> Привет,
>
> Есть процедура, принимающая какие-то аргументы. Аргументы должны
> влиять на набор выражений "order by" одного из запросов. Например: в
> одном случае сортировка по полям 1, 2 (desc) и 3, а в другом по 3, 1 и
> 2, а в третьем только по 2 и 3.
>
> Есть ли решение позволяющее сделать это без использования
> динамического SQL или дублирования кода?
>
С уважением,
Алексей Заяц.
From: | "Sergey Konoplev" <gray(dot)ru(at)gmail(dot)com> |
---|---|
To: | Заяц Алексей <az(at)antora(dot)ru> |
Cc: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Динамический набор выражений в "order by" |
Date: | 2007-11-22 17:10:44 |
Message-ID: | c3a7de1f0711220910l2c6b9al1531031986388716@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Lists: | Postg토토 사이트 추천SQL |
> select id from topic order by ( case when 1=2 then title else name end );
Привет, да, я тоже об этом думал :) Собственно вот к чему пришел:
Если бы все поля по которым надо сортировать были одного типа (напр.
float8) то всё было бы легче.
select * from (
values
(1.27, 23.46, 56.2, 76.1),
(4.35, 6.76, 45.3, 1.6)
) as sq
order by
case
when false then array[-column1, column3]
when true then array[column1]
else array[column2, -column4, column1]
end
Заметь, что я использую вместо "desc" знак минуса. Т.о. надо написать
функцию сопоставления любого типа к float8, т.е. некий аналог
хэш-функции и будет всем счастье. Я накопал в исходниках PG функцию
convert_to_scalar(), которая именно это и делает, сейчас веду
дискуссию в pgsql-general. Как что-нить решится отпишусь.
--
Regards,
Sergey Konoplev