Agréger des arrays dans une cellule PostgreSQL
Bonjour, ce code sympa me donne dans une colonne d'une liste de restaurants (sous forme de points, Postgis), à peu près le quartier dans laquelle ceux-ci se trouve (fonction ST_DWithin de Postgis qui va faire un cercle d'à peu près 1 km (=0,006 degrés de mesure de la Terre pour les tables ne faisant pas l'objet d'une projection géographique, coordonnées GPS simples [wgs84]) autour de ma liste de points de quartiers fr.local.quartier). Si il y plusieurs quartiers (parfois le commerce se situe à l'intersection de plusieurs quartiers), les noms apparaissent à la suite separés par des virgules. Charge à moi, de récuperer ces noms un par un dans Javascript (le client), avec split ou autre sur le caractère virgule.
Le résultat de l'exemple suivant, dans la cellule appellée pgquartier, est par exemple :
Citation:
Châtelet,Saint-Eustache,Le Marais
J'ai besoin d'aller plus loin. Je voudrais avoir le code du quartier avec, de cette maniere, avec un autre caractère scindant qui j'espère ne se trouvera pas dans les résultats (disons pour le moment, le caractère '+'):
Citation:
Châtelet+342,Saint-Eustache+231,Le Marais+215
Comment faire ? je me suis interessé à array_agg mais je ne vois pas comment ca me ferait additioner entre eux plusieurs array.
voici déjà le code d'aggrégation de noms simple de mon premier exemple.
Code:
1 2 3 4 5 6 7 8 9 10
| WITH croisement AS(
SELECT a.name, a.id, string_agg(b.name, ',') as nameq
FROM public.\"fr.poi.barrest\" a
INNER JOIN public.\"fr.local.quartier\" b
ON ST_DWithin(a.wkb_geometry, b.wkb_geometry, 0.006)
GROUP BY a.name, a.id)
UPDATE public.\"fr.poi.barrest\" tpb
SET pgquartier = c.nameq
FROM croisement c
WHERE tpb.id = c.id |