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

From Dmitriy Igrishin
Subject Re: [pgsql-ru-general] Сортировка в требуемом порядке
Date
Msg-id AANLkTi=dhU+g9NWEEpBS_fgWZHLynxXpAtiZTvEUEo=o@mail.gmail.com
Whole thread Raw
In response to Сортировка в требуемом порядке  (Олекс й Василь в <leopard_ne@inbox.ru>)
Responses Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке
List pgsql-ru-general
Приветствую,

14 марта 2011 г. 17:20 пользователь Олекс й Василь в <leopard_ne@inbox.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.


pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: Сортировка в требуемом порядке
Next
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке