Re: order by

Поиск
Список
Период
Сортировка
От Joel Burton
Тема Re: order by
Дата
Msg-id JGEPJNMCKODMDHGOBKDNKEBACOAA.joel@joelburton.com
обсуждение исходный текст
Ответ на order by  (Mathieu Arnold <mat@mat.cc>)
Ответы Re: order by  (Mathieu Arnold <mat@mat.cc>)
Список pgsql-sql
> -----Original Message-----
> From: pgsql-sql-owner@postgresql.org
> [mailto:pgsql-sql-owner@postgresql.org]On Behalf Of Mathieu Arnold
> Sent: Tuesday, May 14, 2002 7:50 AM
> To: pgsql-sql@postgresql.org
> Subject: [SQL] order by <something wierd>
>
>
> Hi
>
> I have :
>
> table a (int, varchar, int)
>
> 1 | one   | 1
> 2 | two   | 3
> 3 | three | 2
> 4 | four  | 3
> 5 | five  | 2
>
> And I would like to select it and sort it so that the 3rd field
> is first 2,
> then 1 and then 3. so that the result should be :
>
> 1 | one   | 1
> 3 | three | 2
> 5 | five  | 2
> 2 | two   | 3
> 4 | four  | 3
>
> How could I do that ?

Mathieu --

You're asking to have it be sorted as {2,1,3}, but the sample result data
you give seems to sort by {1,2,3}. Or am I misunderstanding your question?

In any event, some possible solutions:

1) custom function
 CREATE OR REPLACE FUNCTION weird_sort(int) RETURNS int AS ' BEGIN   IF $1=2 THEN     RETURN 1;   ELSIF $1=1 THEN
RETURN2;   ELSE RETURN 3;   END IF; END' LANGUAGE plpgsql;
 
then
 SELECT * FROM a ORDER BY weird_sort(col3);
The nice thing about this is that you could index the result of
weird_sort(col3), so it could perform better.


2) inlined in sql
 SELECT * FROM a ORDER BY CASE WHEN col3=2 THEN 1               WHEN col3=1 THEN 2               ELSE 3           END;


3) union
 SELECT * FROM a WHERE col3=2
 UNION ALL
 SELECT * FROM a WHERE col3=1
 UNION ALL
 SELECT * FROM a WHERE col3=3;


#1 (with index) or #3 might perform better. Test with your data and see.

Joel BURTON | joel@joelburton.com | joelburton.com | aim: wjoelburton
Knowledge Management & Technology Consultant



В списке pgsql-sql по дате отправления:

Предыдущее
От: Mathieu Arnold
Дата:
Сообщение: Re: order by
Следующее
От: "D'Arcy J.M. Cain"
Дата:
Сообщение: Re: order by