Aggregate Function (AVG) not calculated correctly

Started by PostgreSQL Bugs Listover 25 years ago3 messagesbugs
Jump to latest
#1PostgreSQL Bugs List
pgsql-bugs@postgresql.org

Gavin Evans (gavin@consultant.com) reports a bug with a severity of 1
The lower the number the more severe it is.

Short Description
Aggregate Function (AVG) not calculated correctly

Long Description
Using the following code:
SELECT airline_code, AVG(distance) FROM flights GROUP BY airline_code;

The first line of the result set (AI | -2864) is calculated wrongly.

I have included all code needed to prove the bug, this is a SERIOUS BUG!

G

Sample Code
eg3ab=# select * from flights;
flight_number | aircraft | distance | airline_code | origin | destination
---------------+----------+----------+--------------+--------+-------------
AI434 | 310 | 3417 | AI | BOM | PER
AI306 | 747 | 1724 | AI | BOM | BKK
AI410 | 310 | 2012 | AI | BOM | KUL
AI158 | 740 | 2720 | AI | FRA | BOM
AI112 | 744 | 9632 | AI | JFK | HKG
CX254 | 744 | 8736 | CX | LHR | HKG
VS200 | 340 | 8736 | VS | LHR | HKG
VS501 | 744 | 14737 | VS | LHR | SYD
BA009 | 744 | 12882 | BA | LHR | SYD
QF10 | AB3 | 13368 | QF | LHR | SYD
GA881 | M11 | 8035 | GA | LGW | BKK
PR731 | 74E | 9148 | PR | LGW | BKK
TG915 | 744 | 10905 | TG | LHR | BKK
TG911 | 744 | 9422 | TG | LHR | SIN
BA011 | 744 | 9422 | BA | LHR | SIN
AI180 | 747 | 6422 | AI | LHR | SIN
QF12 | AB3 | 1839 | QF | MEL | PER
BA014 | 767 | 321 | BA | LHR | FRA
AI200 | 747 | 3705 | AI | JFK | FRA
AI181 | 747 | 6422 | AI | SIN | LHR
AI201 | 747 | 3705 | AI | FRA | JFK
(21 rows)

eg3ab=# \i ex13.query
airline_code | avg
--------------+-------
AI | -2864
BA | 7541
CX | 8736
GA | 8035
PR | 9148
QF | 7603
TG | 10163
VS | 11736
(8 rows)

No file was uploaded with this report

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PostgreSQL Bugs List (#1)
Re: Aggregate Function (AVG) not calculated correctly

pgsql-bugs@postgresql.org writes:

I have included all code needed to prove the bug,

No, you haven't: where are the table declarations?

But I'll take a guess anyway: you declared "distance" as int2, didn't
you? AVG(int2) currently uses an int2 accumulator, and you're suffering
overflow. Try "AVG(distance::float8)" instead.

We've changed AVG() to use a numeric accumulator for 7.1, but that
won't help you today.

regards, tom lane

#3Thomas Lockhart
lockhart@alumni.caltech.edu
In reply to: PostgreSQL Bugs List (#1)
Re: Aggregate Function (AVG) not calculated correctly

pgsql-bugs@postgresql.org wrote:

Gavin Evans (gavin@consultant.com) reports a bug with a severity of 1
The lower the number the more severe it is.

Short Description
Aggregate Function (AVG) not calculated correctly

Long Description
Using the following code:
SELECT airline_code, AVG(distance) FROM flights GROUP BY airline_code;

The first line of the result set (AI | -2864) is calculated wrongly.
I have included all code needed to prove the bug, this is a SERIOUS BUG!

You have not included all information required to understand the
problem. In particular, what is the schema? What version of PostgreSQL
are you using? What kind of machine?

Do you happen to be using int2 for the distance fields? In that case you
are likely (silently) overflowing your calculation.

Please post the schema and the data in such a way that we can read it
in! I'd suggest using pg_dump on the relevant table, but other
techniques can be used.

Regards.

- Thomas