Re: [pgsql-ru-general] Сортировка в требуемом порядке

From: Dmitriy Igrishin <dmitigr(at)gmail(dot)com>
To: Олекс й Василь в <leopard_ne(at)inbox(dot)ru>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Сортировка в требуемом порядке
Date: 2011-03-14 17:00:18
Message-ID: AANLkTi=dhU+g9NWEEpBS_fgWZHLynxXpAtiZTvEUEo=o@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-ru-general

Приветствую,

14 марта 2011 г. 17:20 пользователь Олекс й Василь в
<leopard_ne(at)inbox(dot)ru>написал:

> Есть такой запрос:
> Select * from foo where catalog_id IN(2,3,6,1,4,66,44,23,45)
>
> Возможно ли вывести результат в таком же порядке, как и условие в IN,
> тоесть первый елемент с catalog_id == 2, второй - catalog_id == 3, третий
> - catalog_id == 6, четвертый - catalog_id == 1 и т.д.
>
Данную задачу можно решить, заменив IN на JOIN, например:

dmitigr=>
SELECT foo.* FROM (VALUES(1),(2),(3),(4),(6)) AS foo(catalog_id)
JOIN (SELECT id.val, row_number() over() FROM (VALUES(3),(2),(6),(1),(4))
AS id(val)) AS id
ON (foo.catalog_id = id.val) ORDER BY row_number;
catalog_id
------------
3
2
6
1
4

В этом примере foo - исходная таблица с данными,
id - псевдотаблица с 2-мя столбцами: значение (собственно id)
и его порядковый номер.

--
// Dmitriy.

In response to

Responses

Browse pgsql-ru-general by date

  From Date Subject
Next Message Dmitry E. Oboukhov 2011-03-14 19:22:13 Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке
Previous Message Dmitry E. Oboukhov 2011-03-14 15:09:26 Re: Сортировка в требуемом порядке