Re: [SQL] Re: [HACKERS] Re: SELECT DISTINCT ON ... ORDER BY ...
jose' soares <sferac@bo.nettuno.it>
From: "jose' soares" <sferac@bo.nettuno.it>
To: Oliver Elphick <olly@lfix.co.uk>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, pgsql-sql@hub.org, pgsql-hackers@postgreSQL.org
Date: 1999-02-02T15:25:19Z
Lists: pgsql-hackers
Oliver Elphick ha scritto: > "jose' soares" wrote: > >Yes, seems that SELECT DISTINCT ON is not part of SQL92 but it is very > >interesting and I think it is something missing to Standard. > >I don't know how to do the following, if we take off DISTINCT ON from > >PostgreSQL: > > > >db=> select distinct cognome, nome,via from membri where cap = '41010'; > >cognome|nome |via > >-------+----------------+-------------------------- > >FIORANI|ELISABETTA |VIA PRETI PARTIGIANI, 63 > >FIORANI|GASTONE |VIA PRETI PARTIGIANI, 63 > >FIORANI|MATTIA |VIA PRETI PARTIGIANI, 63 > >FIORANI|SIMONE |VIA PRETI PARTIGIANI, 63 > >GOZZI |LILIANA |VIA MAGNAGHI, 39 > >GOZZI |MATTEO |VIA MAGNAGHI, 39 > >RUSSO |DAVIDE |STRADA CORLETTO SUD, 194/1 > >RUSSO |ELENA TERESA |STRADA CORLETTO SUD, 194/1 > >RUSSO |FORTUNATO |STRADA CORLETTO SUD, 194/1 > >RUSSO |MAURIZIO ANTONIO|STRADA CORLETTO SUD, 194/1 > >(10 rows) > > > >db=> select distinct on cognome cognome, nome,via from membri where cap = > >'41010'; > >cognome|nome |via > >-------+----------------+-------------------------- > >FIORANI|GASTONE |VIA PRETI PARTIGIANI, 63 > >GOZZI |LILIANA |VIA MAGNAGHI, 39 > >RUSSO |MAURIZIO ANTONIO|STRADA CORLETTO SUD, 194/1 > >(3 rows) > > This gives the same results: > > junk=> select cognome, nome, via from membri where cap = '41010' group by cognome; > cognome|nome |via > -------+----------+-------------------------- > FIORANI|ELISABETTA|VIA PRETI PARTIGIANI, 63 > GOZZI |LILIANA |VIA MAGNAGHI, 39 > RUSSO |DAVIDE |STRADA CORLETTO SUD, 194/1 This is very interesting and useful, I thought it wasn't possible. Seems that standard allows only the "order by" column(s) and the aggregate function(s) on target list. I tried the same query on Informix, also on Ocelot but it gives me an error. On Informix and Ocelot queries like: select cognome, max(age) from membri where cap = '41010' group by cognome; are allowed. but queries like: select cognome, nome, via from membri where cap = '41010' group by cognome; aren't allowed. -Jose'-