Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке
От | Dmitry E. Oboukhov |
---|---|
Тема | Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке |
Дата | |
Msg-id | 20110314194302.GH19356@apache.rbscorp.ru обсуждение исходный текст |
Ответ на | Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке ("Dmitry E. Oboukhov" <unera@debian.org>) |
Список | pgsql-ru-general |
On 22:22 Mon 14 Mar , Dmitry E. Oboukhov wrote: DI>> 14 марта 2011 г. 17:20 пользователь Олекс й Василь в <leopard_ne@inbox.ru> DI>> написал: DI>> Есть такой запрос: DI>> Select * from foo where catalog_id IN(2,3,6,1,4,66,44,23,45) DI>> Возможно ли вывести результат в таком же порядке, как и условие в IN, DI>> тоесть первый елемент с catalog_id == 2, второй - catalog_id == 3, третий DI>> - catalog_id == 6, четвертый - catalog_id == 1 и т.д. DI>> Данную задачу можно решить, заменив IN на JOIN, например: DI>> dmitigr=> DI>> SELECT foo.* FROM (VALUES(1),(2),(3),(4),(6)) AS foo(catalog_id) DI>> JOIN (SELECT id.val, row_number() over() FROM (VALUES(3),(2),(6),(1),(4)) AS DI>> id(val)) AS id DI>> ON (foo.catalog_id = id.val) ORDER BY row_number; DI>> catalog_id DI>> ------------ DI>> 3 DI>> 2 DI>> 6 DI>> 1 DI>> 4 Tprgpo> кстати unnest как-то даже покороче выглядит Tprgpo> SELECT Tprgpo> foo.* Tprgpo> FROM Tprgpo> unnest('{3,2,6,1,4}'::int[]) idt Tprgpo> JOIN Tprgpo> foo ON catalog_id = idt Tprgpo> WHERE Tprgpo> foo.id IS NOT NULL; WHERE конечно же не нужен, WHERE это если LEFT JOIN :) -- . ''`. Dmitry E. Oboukhov : :’ : email: unera@debian.org jabber://UNera@uvw.ru `. `~’ GPGKey: 1024D / F8E26537 2006-11-21 `- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
Вложения
В списке pgsql-ru-general по дате отправления: