Re: Question about sorting internals - Mailing list pgsql-hackers

From Ashutosh Bapat
Subject Re: Question about sorting internals
Date
Msg-id CAFjFpRfZF4Ojvag=FcgFQKCFzkveKqY+nD9LaGi0--cq4sjARw@mail.gmail.com
Whole thread Raw
In response to Question about sorting internals  (hubert depesz lubaczewski <depesz@depesz.com>)
Responses Re: Question about sorting internals
List pgsql-hackers
Hi deepesz,
You might want to see their EXPLAIN VERBOSE outputs. Having one of them (2004 one) lesser number of rows, might be getting picked up as first relation being union and thus ends up having it's rows before the second one. Explain output would make it more clear. Also, try having same number of rows in both the relations.


On Wed, Dec 11, 2013 at 3:26 PM, hubert depesz lubaczewski <depesz@depesz.com> wrote:
Hi,

before I'll go any further - this is only thought-experiment. I do not
plan to use such queries in real-life applications. I was just presented
with a question that I can't answer in any logical way.

There are two simple queries:

#v+
with rok2005 (miesiac,wynik) as (VALUES (1,1),(2,2)      ,(4,4),(5,NULL),(6,6))
    ,rok2004 (miesiac,wynik) as (VALUES (1,3)      ,(3,3),(4,5)         ,(6,6))
SELECT
distinct on (miesiac) *
FROM (
    SELECT miesiac, 2005 as rok, wynik FROM rok2005
    union all
    SELECT miesiac, 2004 as rok, wynik FROM rok2004
) as polaczone
ORDER BY miesiac, wynik desc;
#v-

#v+
with rok2005 (miesiac,wynik) as (VALUES (1,1),(2,2)      ,(4,4),(5,NULL),(6,6))
    ,rok2004 (miesiac,wynik) as (VALUES (1,3)      ,(3,3),(4,5)         ,(6,6))
SELECT
distinct on (miesiac) *
FROM (
    SELECT miesiac, 2004 as rok, wynik FROM rok2004
    union all
    SELECT miesiac, 2005 as rok, wynik FROM rok2005
) as polaczone
ORDER BY miesiac, wynik desc;
#v-

They differ only in order of queries in union all part.

The thing is that they return the same result. Why isn't one of them returning
"2005" for 6th "miesiac"?

I know I'm not sorting using "rok", which means I'm getting "undefined
functionality". Fine. But what exactly is happening that regardless of
order of rows in subquery, I get the same, always lower, rok in output?

Best regards,

depesz

--
The best thing about modern society is how easy it is to avoid contact with it.
                                                             http://depesz.com/



--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company

pgsql-hackers by date:

Previous
From: hubert depesz lubaczewski
Date:
Subject: Question about sorting internals
Next
From: Dimitri Fontaine
Date:
Subject: Re: Completing PL support for Event Triggers