Re: [Talk-it] Domanda postgres
2011/2/24 M∡rtin Koppenhoefer dieterdre...@gmail.com: Scusate, se sono un po' OT, ho fatto delle prove e non capisco il risultato: echo select count(oneway='yes') from planet_osm_roads | psql -d gis count 480928 echo select count(*) from planet_osm_roads where oneway='yes'; | psql -d gis count 460284 come mai la risposta è diversa? Sono andato avanti, qui rimane uguale: echo select count(oneway='yes' or oneway='true') from planet_osm_roads | psql -d gis count 480928 mentre qui aumenta: echo select count(*) from planet_osm_roads where oneway='yes' or oneway='true' | psql -d gis count 470139 echo select count(*) from planet_osm_roads where oneway='yes' or oneway='true' or oneway='1' | psql -d gis count 471498 C'è qualcuno tra di voi chi sa perché ricevo risposte diverse? (Per le richiesto dove cerco true e 1 nell WHERE è chiaro, ma perché l'espressione dentro al count crea un risultato leggermente diverso? Non ho sottomano Postgresql per fare prove. Di solito con Oracle non metto mai il filtro all'interno della COUNT: va messo nella WHERE. Dai tuoi numeri, le uniche stranezze sono: select count(oneway='yes') from planet_osm_roads: 480928 select count(oneway='yes' or oneway='true') from planet_osm_roads: 480928 Questi numeri sono uguali tra loro e maggiori di tutti gli altri Dalla documentazione di Postgresql: http://www.postgresql.org/docs/8.2/static/functions-aggregate.html number of input rows for which the value of expression is not null mi chiedo se quelle SELECT non stiano in effetti restituendo il numero totale di record dove oneway IS NOT NULL Cioè io sospetto che: SELECT count(1) FROM planet_osm_roads WHERE oneway = 'yes' : 460284 SELECT count(1) FROM planet_osm_roads WHERE oneway = 'yes' OR oneway = 'true': 470139 SELECT count(1) FROM planet_osm_roads WHERE oneway = 'yes' OR oneway = 'true' OR oneway = '1' : 471498 SELECT count(1) FROM planet_osm_roads WHERE oneway IS NOT NULL : 480928 (ci sono anche oneway='no' e tanti altri possibili valori...) Ciao, Federico ___ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it
Re: [Talk-it] Domanda postgres
Il 25 febbraio 2011 10:11, Federico Cozzi f.co...@gmail.com ha scritto: Non ho sottomano Postgresql per fare prove. Di solito con Oracle non metto mai il filtro all'interno della COUNT: va messo nella WHERE. anch'io con postgresql lo faccio così per esempio SELECT count(osm_id) FROM planet_osm_roads WHERE oneway = 'yes' OR oneway = 'true' OR oneway = '1'; questa secondo me è la cosa migliore Ciao, Federico -- ciao Luca http://gis.cri.fmach.it/delucchi/ www.lucadelu.org ___ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it
Re: [Talk-it] Domanda postgres
2011/2/25 Federico Cozzi f.co...@gmail.com: Cioè io sospetto che: SELECT count(1) FROM planet_osm_roads WHERE oneway = 'yes' : 460284 SELECT count(1) FROM planet_osm_roads WHERE oneway IS NOT NULL : 480928 (ci sono anche oneway='no' e tanti altri possibili valori...) si, confermo. E' così. Martin ___ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it
Re: [Talk-it] Domanda postgres
2011/2/25 Luca Delucchi lucadel...@gmail.com: Il 25 febbraio 2011 10:11, Federico Cozzi f.co...@gmail.com ha scritto: Non ho sottomano Postgresql per fare prove. Di solito con Oracle non metto mai il filtro all'interno della COUNT: va messo nella WHERE. anch'io con postgresql lo faccio così per esempio SELECT count(osm_id) FROM planet_osm_roads WHERE oneway = 'yes' OR oneway = 'true' OR oneway = '1'; questa secondo me è la cosa migliore Si, anch'io usavo questo metodo finora, ma leggendo la documentazione mi era venuto l'idea di provare anche l'altro modo (che apparentemente non faceva quello che volevo). Visto che mi avete dato delle risposte ottime, mi potete anche spiegare perché questo: UPDATE planet_osm_polygon SET name=regexp_replace(name,'fixme','','i') WHERE name IS NOT NULL AND name ~*'^fixme|$fixme'; mi fa l'update di tutte le righe anche dove non c'è un fixme contenuto? Se faccio un select: select name FROM planet_osm_polygon WHERE name IS NOT NULL AND name ~*'^fixme|$fixme'; mi seleziona solo poche righe. ciao Martin ___ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it
Re: [Talk-it] Domanda postgres
2011/2/25 M∡rtin Koppenhoefer dieterdre...@gmail.com: UPDATE planet_osm_polygon SET name=regexp_replace(name,'fixme','','i') WHERE name IS NOT NULL AND name ~*'^fixme|$fixme'; scusate il rumore, era un typo (fixme$) ora sto zitto, visto che sono OT. buona mappatura, Martin ___ Talk-it mailing list Talk-it@openstreetmap.org http://lists.openstreetmap.org/listinfo/talk-it