Skip site navigation (1) Skip section navigation (2)

Peripheral Links

Header And Logo

PostgreSQL
| The world's most advanced open source database.

Site Navigation

Search archives
  Advanced Search

Re: Динамический набор выражений в "order by"


  • From: "Sergey Konoplev" <gray(dot)ru(at)gmail(dot)com>
  • To: "Заяц Алексей" <az(at)antora(dot)ru>
  • Cc: pgsql-ru-general(at)postgresql(dot)org
  • Subject: Re: Динамический набор выражений в "order by"
  • Date: Thu, 22 Nov 2007 20:10:44 +0300
  • Message-id: <c3a7de1f0711220910l2c6b9al1531031986388716@mail.gmail.com> <text/plain>

> select id from  topic order by  ( case when 1=2 then title else name end );

Привет, да, я тоже об этом думал :) Собственно вот к чему пришел:

Если бы все поля по которым надо сортировать были одного типа (напр.
float8) то всё было бы легче.

select *  from (
   values
       (1.27, 23.46, 56.2, 76.1),
       (4.35, 6.76, 45.3, 1.6)
) as sq
order by
   case
       when false then array[-column1, column3]
       when true  then array[column1]
       else array[column2, -column4, column1]
   end

Заметь, что я использую вместо "desc" знак минуса. Т.о. надо написать
функцию сопоставления любого типа к float8, т.е. некий аналог
хэш-функции и будет всем счастье. Я накопал в исходниках PG функцию
convert_to_scalar(), которая именно это и делает, сейчас веду
дискуссию в pgsql-general. Как что-нить решится отпишусь.

-- 
Regards,
Sergey Konoplev


Home | Main Index | Thread Index

Privacy Policy | About PostgreSQL
Copyright © 1996 – 2012 PostgreSQL Global Development Group