Re: [BUGS] General Bug Report: GROUP BY with NULL not done properly(Oracle8& DB/2 do this completely different) - Mailing list pgsql-bugs
From | sszabo@bigpanda.com |
---|---|
Subject | Re: [BUGS] General Bug Report: GROUP BY with NULL not done properly(Oracle8& DB/2 do this completely different) |
Date | |
Msg-id | 199907081457.KAA27274@megazone.bigpanda.com Whole thread Raw |
In response to | Re: [BUGS] General Bug Report: GROUP BY with NULL not done properly(Oracle8& DB/2 do this completely different) (secret <secret@kearneydev.com>) |
List | pgsql-bugs |
>Bruce Momjian wrote: > >> Looks like this is fixed in 6.5. >> >> test=> SELECT a,sum(b) FROM z GROUP BY a; >> a|sum >> -+--- >> 1| 6 >> | 4 >> (2 rows) >> >> > >> > ============================================================================ >> > POSTGRESQL BUG REPORT TEMPLATE >> > ============================================================================ >> > >> > >> > Your name : >> > Your email address : secret@kearneydev.com >> > >> > Category : runtime: back-end: SQL >> > Severity : non-critical >> > >> > Summary: GROUP BY with NULL not done properly(Oracle8 & DB/2 do this completely different) >> > >> > System Configuration >> > -------------------- >> > Operating System : Linux 2.2.7 Redhat 5.2 >> > >> > PostgreSQL version : 6.4.2 >> > >> > Compiler used : 2.7.2.3 >> > >> > Hardware: >> > --------- >> > Linux tau.kearneydev.com 2.2.7 #3 Thu Apr 29 10:10:41 EDT 1999 i686 unknown >> > >> > Versions of other tools: >> > ------------------------ >> > >> > >> > -------------------------------------------------------------------------- >> > >> > Problem Description: >> > -------------------- >> > The appearance of NULL in a table where a GROUP BY clause is >> > used causes the behavior of returning 1 line for every NULL. >> > Both Oracle8 and DB/2 perform this as I would expect. IE >> > a,b >> > 1,1 >> > 1,2 >> > NULL,1 >> > NULL,2 >> > >> > SELECT a,sum(b) GROUP BY a returns on Postgres: >> > 1,3 >> > NULL,1 >> > NULL,2 >> > >> > On Oracle8, DB/2, etc.: >> > 1,3 >> > NULL,3 >> > >> > Cut&paste from Oracle8: >> > SQL> select * from z; >> > >> > A B >> > --------- --------- >> > 1 1 >> > 1 2 >> > 5 >> > 10 >> > >> > SQL> select a,sum(b) from z group by a; >> > >> > A SUM(B) >> > --------- --------- >> > 1 3 >> > 15 >> > >> > SQL> >> > >> > -------------------------------------------------------------------------- >> > >> > Test Case: >> > ---------- >> > CREATE TABLE z(a int4,b int4); >> > INSERT INTO z values (1,2); >> > INSERT INTO z VALUES (1,1); >> > INSERT INTO z(b) VALUES (1); >> > INSERT INTO z(b) VALUES (2); >> > SELECT a,sum(b) FROM z GROUP BY a; >> > >> > >> > -------------------------------------------------------------------------- >> > >> > Solution: >> > --------- >> > For whatever reason I've observed many times that NULL<>NULL >> > under PostgreSQL, I've had to include many clauses in my >> > SQL statements to make up for this, perhaps if this was >> > corrected it would function properly. >> > >> > -------------------------------------------------------------------------- >> > >> > >> > >> >> -- >> Bruce Momjian | http://www.op.net/~candle >> maillist@candle.pha.pa.us | (610) 853-3000 >> + If your life is a hard drive, | 830 Blythe Avenue >> + Christ can be your backup. | Drexel Hill, Pennsylvania 19026 > > It works fine with 1 variable, try it with 2. 6.4.2 worked fine for 1, it's just when you >GROUP BY 2 variables that contain NULLs issues start appearing.(Another reason it looks like a >bug, not a feature :)) When i make the following table: a|b| c -+-+-- 1|1|10 1|2|10 1|2| 5 2|2|15 2|2|-3 2|1|50 2| |25 2| |15 1| |34 1| |54 | | 5 | | 7 |1| 7 |4| 7 |4| 7 (15 rows) And do the following query, I get what i think was desired, the null/null, null/4, 1/null, 2/null are grouped together into a single output row... sszabo=> select a,b,sum(c) from b group by a,b; a|b|sum -+-+--- 1|1| 10 1|2| 15 1| | 88 2|1| 50 2|2| 12 2| | 40 |1| 7 |4| 14 | | 12 (9 rows) sszabo=> select version(); version -------------------------------------------------------------------- PostgreSQL 6.5.0 on i386-unknown-freebsd3.1, compiled by gcc 2.7.2.1
pgsql-bugs by date: