Thread: Possibly Incorrect Data Return

Possibly Incorrect Data Return

From
PG Doc comments form
Date:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/15/tutorial-agg.html
Description:

Hello: I am working through the tutorial and the Doc page says the row count
is 5 but my results show 0 records. Of course, I may be doing something
wrong, too:

jwjwj=# SELECT city, max(temp_lo), count(*) FILTER (WHERE temp_lo < 30)
    FROM weather
    GROUP BY city
    HAVING max(temp_lo) < 40;
  city   | max | count 
---------+-----+-------
 Hayward |  37 |     0
(1 row)

Re: Possibly Incorrect Data Return

From
Tom Lane
Date:
PG Doc comments form <noreply@postgresql.org> writes:
> Hello: I am working through the tutorial and the Doc page says the row count
> is 5 but my results show 0 records. Of course, I may be doing something
> wrong, too:

> jwjwj=# SELECT city, max(temp_lo), count(*) FILTER (WHERE temp_lo < 30)
>     FROM weather
>     GROUP BY city
>     HAVING max(temp_lo) < 40;
>   city   | max | count 
> ---------+-----+-------
>  Hayward |  37 |     0
> (1 row)

No, you're right, given the sample data shown earlier then count = 0
is what you would get.  Somebody injected this FILTER example without
a lot of thought, it would appear, as not only does the output not
match but it's completely disjointed from the flow of explanation
(IMO anyway).  This example originally introduced only HAVING, and
trying to make it do double duty just confuses things.  A fully
separate example of FILTER would have served better.

I'll go do something about that --- thanks for the report!

            regards, tom lane



Re: Possibly Incorrect Data Return

From
Bruce Momjian
Date:
On Tue, Nov  8, 2022 at 05:22:24PM -0500, Tom Lane wrote:
> PG Doc comments form <noreply@postgresql.org> writes:
> > Hello: I am working through the tutorial and the Doc page says the row count
> > is 5 but my results show 0 records. Of course, I may be doing something
> > wrong, too:
> 
> > jwjwj=# SELECT city, max(temp_lo), count(*) FILTER (WHERE temp_lo < 30)
> >     FROM weather
> >     GROUP BY city
> >     HAVING max(temp_lo) < 40;
> >   city   | max | count 
> > ---------+-----+-------
> >  Hayward |  37 |     0
> > (1 row)
> 
> No, you're right, given the sample data shown earlier then count = 0
> is what you would get.  Somebody injected this FILTER example without
> a lot of thought, it would appear, as not only does the output not
> match but it's completely disjointed from the flow of explanation
> (IMO anyway).  This example originally introduced only HAVING, and
> trying to make it do double duty just confuses things.  A fully
> separate example of FILTER would have served better.
> 
> I'll go do something about that --- thanks for the report!

Sorry, that was me, and I thought I checked it, but obviously
incorrectly, thanks.

-- 
  Bruce Momjian  <bruce@momjian.us>        https://momjian.us
  EDB                                      https://enterprisedb.com

  Indecision is a decision.  Inaction is an action.  Mark Batterson