Re: BUG #10256: COUNT(*) behaves sort of like RANK() when used over a window containing an ORDER BY

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #10256: COUNT(*) behaves sort of like RANK() when used over a window containing an ORDER BY
Дата
Msg-id 5812.1399498939@sss.pgh.pa.us
обсуждение исходный текст
Ответ на BUG #10256: COUNT(*) behaves sort of like RANK() when used over a window containing an ORDER BY  (arnaud.mouronval@gmail.com)
Ответы Re: BUG #10256: COUNT(*) behaves sort of like RANK() when used over a window containing an ORDER BY
Список pgsql-bugs
arnaud.mouronval@gmail.com writes:
> I discovered a problem while using a window that used an ORDER BY clause,
> and using this window with ROW_NUMBER() and COUNT(*) at the same time.

> Here is a short SQL script to replicate it :

> DROP TABLE IF EXISTS tmp_count_window_bug_data;
> CREATE TABLE tmp_count_window_bug_data (c1 character varying(8), c2
> character varying(8));
> INSERT INTO tmp_count_window_bug_data (c1, c2)
> VALUES
>     ('A', 'AA'),
>     ('A', 'AB'),
>     ('B', 'BA'),
>     ('B', 'BB'),
>     ('B', 'BC'),
>     ('B', 'BC'),
>     ('B', 'BD');

> SELECT
>     c1,
>     COUNT(*) OVER(PARTITION BY c1),
>     COUNT(*) OVER(PARTITION BY c1 ORDER BY c2)
> FROM tmp_count_window_bug_data;

> Result on my machine :
> "A";2;1
> "A";2;2
> "B";5;1
> "B";5;2
> "B";5;4
> "B";5;4
> "B";5;5

This looks correct to me.  Keep in mind that the default window framing
clause is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, which really
means "all rows up to and including the last sort peer of the current row".
With no ORDER BY clause, all rows in the partition are peers, so you get a
count covering the whole partition no matter which row you are on.  With
an ORDER BY, you get a count of only the rows up to the current row (or
its last peer, when there are duplicate values in the ORDER BY columns).

> I was expecting to get the same values in the last 2 columns.

For that you'd want RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED
FOLLOWING.

            regards, tom lane

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

Предыдущее
От: Heikki Linnakangas
Дата:
Сообщение: Re: BUG #10250: pgAdmin III 1.16.1 stores unescaped plaintext password
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #10254: Joined Constraints not invoked on date ranges