Thread: UNION and ORDER BY

UNION and ORDER BY

From
Cool Screen
Date:
With:

(select *
from table1
where col1=1
order by name)
union
(select *
from table1
where col1=2
order by random())

UNION apparently reorders all the rows of the result
in their natural order (sequence in which they where
inserted). Is there a way to have the first part of
the results ordered by name, and the second part by random()?

__________________________________________________
Do you Yahoo!?
U2 on LAUNCH - Exclusive greatest hits videos
http://launch.yahoo.com/u2

Re: UNION and ORDER BY

From
Dmitry Tkach
Date:
I *think* if you use unionall, it should do what you want here...

I hope, it helps.

Dima

Cool Screen wrote:
> With:
>
> (select *
> from table1
> where col1=1
> order by name)
> union
> (select *
> from table1
> where col1=2
> order by random())
>
> UNION apparently reorders all the rows of the result
> in their natural order (sequence in which they where
> inserted). Is there a way to have the first part of
> the results ordered by name, and the second part by random()?
>
> __________________________________________________
> Do you Yahoo!?
> U2 on LAUNCH - Exclusive greatest hits videos
> http://launch.yahoo.com/u2
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>



Re: UNION and ORDER BY

From
Tom Lane
Date:
Cool Screen <cool_screen_name90001@yahoo.com> writes:
> UNION apparently reorders all the rows of the result
> in their natural order

No.  It sorts them so it can eliminate duplicate rows, as per spec.
Try UNION ALL if you just want the two subselect results concatenated.

            regards, tom lane