From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
---|---|
To: | pgsql-ru-general(at)postgresql(dot)org |
Subject: | Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке |
Date: | 2011-03-14 19:43:03 |
Message-ID: | 20110314194302.GH19356@apache.rbscorp.ru |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-ru-general |
On 22:22 Mon 14 Mar , Dmitry E. Oboukhov wrote:
DI>> 14 марта 2011 г. 17:20 пользователь Олекс й Василь в <leopard_ne(at)inbox(dot)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(at)debian(dot)org jabber://UNera(at)uvw(dot)ru
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
`- 1B23 D4F8 8EC0 D902 0555 E438 AB8C 00CF F8E2 6537
From | Date | Subject | |
---|---|---|---|
Next Message | Dmitriy Igrishin | 2011-03-14 19:51:52 | Re: [pgsql-ru-general] Re: [pgsql-ru-general] Сортировка в требуемом порядке |
Previous Message | Dmitry E. Oboukhov | 2011-03-14 19:22:13 | Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке |