PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Sequence avec group by » 08/02/2014 21:47:26

Bonsoir,
à propos de la réponse de gleu, j'ai peut etre induit en erreur : en réalité, mes données ne sont pas forcément ordonnées correctement, c'est à dire que j'aurais plutot dans la table noeud
gid||origine
1||CAY
7||CAY
4||CAY
3||JOL
9||JOL
8||JOL
2||JOL
5||TBN
9||TBN
du coup l'order by gid ne suffit pas (à priori ça marche avec order by origine, gid).

Donc au final merci, ça marche. Je ne connaissais pas cette instruction OVER (PARTITION BY .

Quand à l'autre réponse (sqlpro) je vais tester ça après avoir pris le temps de bien comprendre ce mécanisme de table de cle.
Merci également.

Alexis

#2 Site PostgreSQL.fr » Vue postgis avec srid=0 dans geometry_columns » 08/02/2014 21:12:00

Alexis GAILLOT
Réponses : 0

Bonjour,
sous postgis 2, j'ai créé une vue à partir d'une table de raster importés dans ma base avec raster2pgsql.
Voici ma requête de création de la vue :
create or replace view v_emprise_raster as select rid , rast::geometry as geom, filename from raster_lot9;

J'ai vérifié , les géométries sont bien de type polygon, et le srid est 2154 (En effet, la requête select st_asewkt(geom) from v_emprise_raster limit 10; me ramène bien des lignes du type : "SRID=2154;POLYGON((786000 6515000,786500 6515000,786500 6514500,786000 6514500,786000 6515000))").

Par contre, dans geometry_columns, ma vue v_emprise_raster a un srid = 0 :
f_table_catalog     f_table_schema     f_table_name     f_geometry_column     coord_dimension     srid     type
demo_decoupe     public     v_emprise_raster     geom     2     0     GEOMETRY
1 rows with 7 columns retrieved.
select * from geometry_columns where srid<=0;

Je n'arrive pas à mettre à jour srid=2154 pour cette vue v_emprise_raster dans geometry_columns.
Pas moyen, ni avec select populate_geometry_columns(), ni select UpdateGeometrySRID('v_emprise_raster','geom',2154), ni UPDATE geometry_columns SET srid=2154 WHERE f_table_name='v_emprise_raster';

Je n'ai pas ce problème avec une vue créée à partir d'une table "normale", c'est à dire une table géométrique qui n'est pas une table de raster.
C'est marrant car QGIS affiche convenablement la visualisation la requête suivante :
select rid , rast::geometry as geom, filename from raster_lot9 limit 10;


Y a-t-il une subtilité ?

Merci d'avance. Cordialement, Alexis GAILLOT

#3 Re : Général » Sequence avec group by » 01/02/2014 19:48:03

Voici la requete que j'ai utilisé :

select gid, nom, origine,
       (select count(*)
         from noeuds p
         where p.origine=n.origine and n.gid>=p.gid and p.type ='PM'
         )
from noeuds n
where type = 'PM';

mais je pensais qu'il y avait moyen de faire plus "postgresqlesque" avec une sequence.
Alexis

#4 Général » Sequence avec group by » 01/02/2014 17:50:57

Alexis GAILLOT
Réponses : 7

Bonjour,
je voudrais savoir s'il est possible d'utiliser nextval('ma_sequence') dans un esprit GROUP BY, c'est à dire ramener dans un select un compteur qui se réinitialise à chquque nouvelle valeur d'un autre champ.
exemple : voici ma table noeud
gid||origine
1||CAY
2||CAY
3||CAY
4||JOL
5||JOL
6||JOL
7||JOL
8||TBN
9||TBN

Ma séquence est : create sequence ma_seq start with 1;

Je voudrais que mon select du type "select gid, origine, nextval('ma_sequence') as compteur from noeud group by gid, origine" me ramène ceci :

gid||origine||compteur
1||CAY||1
2||CAY||2
3||CAY||3
4||JOL||1
5||JOL||2
6||JOL||3
7||JOL||4
8||TBN||1
9||TBN||2

mais ça ne marche pas car la séquence n'est pas réinitialisée à chaque valeur du group by sur le champ origine.

J'ai contourné le pb avec une sous requête avec un select count(*) sur la même table une deuxième fois, et une condition compliquée, ça marche mais l'écriture est très lourde.

Y a-til un moyen de faire ça simplement avec une séquence ?

Merci. Alexis

Pied de page des forums

Propulsé par FluxBB