banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GeoDataDays 2025

#1 Thu 14 August 2025 16:51

image95
Participant assidu
Date d'inscription: 6 Sep 2014
Messages: 289

Aggregation (array_agg) : type de champ "tableau de nombres"?

Bonjour,
Avec postgis, j'ai un script SQL qui contient une section dédiée à un geotraitement d'aggrégation.
A partir de plusieurs données sources qui contiennent chacune un id unique, cette aggregation récupère dans une nouvelle table une aggregation des id pour chaque recouvrement/superposition de polygones :

Ci dessous, l'extrait du script :

Code:

array_agg(l.id_unique) as data_id_ori

Pour info, la colonne en sortie est de type numeric.
Cela fonctionne Mais j'ai noté de petites limites.
Un extrait ci dessous du résultat :

|                                |
|   data_id_ori             |
--------------------------|
| 27, 26, 17, 6, 1, 2, 15|
|                                 |
|                                 |


Comment pourrait on ordonner cette liste dans un ordre croissant?
Plus important / problématique. Lorsqu'on requete sur ce champ via qgis. Et qu'on souhaite par exemple selectionner uniquement les valeurs entités pour lesquelles data_id_ori = 1

Qgis selectionne bien les valeurs 1 mais également les chiffres 1 composant les 17, 15...

Est ce que la limite vient de la fonction d'aggregation (array_agg).
Et/ou faut il forcer en sortie un type de champ spécifique ? Comme tableau de nombres entiers et non le type postgresql numeric comme ca semble etre le cas par defaut ?

Un grand merci.

Hors ligne

 

#2 Thu 14 August 2025 21:25

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1565

Re: Aggregation (array_agg) : type de champ "tableau de nombres"?

Bonsoir,

Pour ordonner, vous pouvez utiliser des order by dans les fonctions agrégées:

Code:

array_agg(l.id_unique order by l.id_unique) as data_id_ori

Pour qgis, le pb est que le tableau d'entier est représenté sous forme de texte lors de l'échange. Pas sur que le type tableau d'entier soit reconnu.
Pour chercher, vous pouvez utiliser des fonctions de regex ou de parsing dans qgis, par ex pour parser sur le charactère ',' et comparer les valeurs obtenues avec votre valeur.

Non la limite ne vient pas de array_agg ou de PG, ca vient des types supportés par qgis quand il lit une table postgresql.

Nicolas

Hors ligne

 

#3 Mon 18 August 2025 10:03

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1204

Re: Aggregation (array_agg) : type de champ "tableau de nombres"?

Salut,

Qgis dispose de la fonction string_to_array qui permet de transformer un tableau représenté par du texte en "vrai" tableau. Vous pouvez créer un champ virtuel qui utilise cette fonction et ensuite utiliser les autres fonctions tableau de Qgis pour effectuer vos selections ou traitements.

Hors ligne

 

Pied de page des forums

Copyright Association GeoRezo