Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 15h16   #1
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Par défaut group_concat pour postgresql

Bonjour,

Voici une requete MySql et j'aimerai avoir son équivalent pour potsgresql 8.1

Code :
1
2
3
4
5
 
 
SELECT libelle , count( * ) , 
GROUP_CONCAT( id ORDER BY id SEPARATOR ', ' ) 
FROM liste_ville GROUP BY libelle HAVING count( * ) > 1;

Merci pour votre aide
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 15h30   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 278
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 278
Points : 2 324
Points : 2 324
Bonjour,

a ma connaissance tu dois faire une fonction pour effectuer ceci

Un exemple
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 19h42   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
GROUP_CONCAT est spécifique à MySQL et constitue une hérésie sur le plan du SQL. Vous ne le trouverez donc nulle part ailleurs !

Le mieux est d'utiliser une requête récursive (optimisable), plutôt qu'une fonction, comme celle que j'ai donné ici :
http://sqlpro.developpez.com/cours/s...te-recursives/
Exemple :
IV-D. Quatrième exemple : concaténer des mots pour former une phrase

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/02/2011, 19h10   #4
Membre confirmé
 
Avatar de Jihnn
 
Inscription : décembre 2005
Messages : 330
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 330
Points : 216
Points : 216
On peut simuler GROUP_CONCAT avec array_agg + array_to_string, mais je ne sais pas comment ordonner proprement cela. La requête de SQLPro semble donc bien plus efficace.

Edit: Je n'avais pas vu la version 8.1, je crois qu'array_agg n'est pas disponible pour cette version, désolé.
Jihnn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 20h03   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
La fonction array_agg() est remplaçable par array_accum() qui se définit comme ça:
Code :
1
2
3
4
5
6
CREATE AGGREGATE array_accum (
    sfunc = array_append,
    basetype = anyelement,
    stype = anyarray,
    initcond = '{}'
);
et qui fonctionnera en 8.1

En revanche les requêtes récursives proposées par SQLpro ne sont pas disponibles en 8.1, c'est 8.4 minimum.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h36.


 
 
 
 
Partenaires

Hébergement Web