agora inbox for pgsql-ru-general@postgresql.org  
help / color / mirror / Atom feed
From: Dmitry E. Oboukhov <unera@debian.org>
To: pgsql-ru-general@postgresql.org
Subject: Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке
Date: Mon, 14 Mar 2011 22:43:03 +0300
Message-ID: <20110314194302.GH19356@apache.rbscorp.ru> (raw)
In-Reply-To: <20110314191250.GF19356@apache.rbscorp.ru>
References: <E1Pz8dD-00012t-00.leopard_ne-inbox-ru@f261.mail.ru>
	<AANLkTi=dhU+g9NWEEpBS_fgWZHLynxXpAtiZTvEUEo=o@mail.gmail.com>
	<20110314191250.GF19356@apache.rbscorp.ru>

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

Attachments:

  [application/pgp-signature] signature.asc (197B, ../20110314194302.GH19356@apache.rbscorp.ru/2-signature.asc)
  download

view thread (8+ messages)  latest in thread

Message-ID: <20110314194302.GH19356@apache.rbscorp.ru>
Permalink:  ../20110314194302.GH19356@apache.rbscorp.ru/
Also on:    postgresql.org/message-id/20110314194302.GH19356@apache.rbscorp.ru

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-ru-general@postgresql.org
  Cc: unera@debian.org
  Subject: Re: Re: [pgsql-ru-general] Сортировка в требуемом порядке
  In-Reply-To: <20110314194302.GH19356@apache.rbscorp.ru>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox