Merger les resultats d'une jointure multiple
Résolu
Exileur
Messages postés
1621
Date d'inscription
Statut
Membre
Dernière intervention
-
Exileur Messages postés 1621 Date d'inscription Statut Membre Dernière intervention -
Exileur Messages postés 1621 Date d'inscription Statut Membre Dernière intervention -
Hello Hello,
Me voila bien en galére sur postgres dont je ne suis pas specialement famillier ...
J'ai trois tables:
Je souhaite que le résultat de ma jointure ressemble à ça mais impossible d'y parvenir :
Voila la commande que j'utilise et son résultat :
En mysql j'aurai utilisé GROUP_CONCAT mais qui n'est pas une fonction postgres valide.
j'ai tenté le GROUP BY clients.name mais il me sors une erreur et veux que je rajoute égallement le champ products.name du coup il me fait juste une sorte de ORDER_BY mais ne concaténe pas les résultats
j'ai tenté un SELECT DISTINCT(clients.name) mais il me sort uniquement le premier produit commandé par l'utilisateur....
Je commence à secher et mes connaissances postgres sont trop faible.
Un connaisseur peut il m'aider ? :)
Merci d'avance
--
N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
Me voila bien en galére sur postgres dont je ne suis pas specialement famillier ...
J'ai trois tables:
Table clients
+----+-------+
| id | name |
+----+-------+
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+----+-------+
Table products
+----+----------+
| id | name |
+----+----------+
| 1 | service1 |
| 2 | service2 |
| 3 | service3 |
| 4 | service4 |
+----+----------+
Table commands
+----+-----------+------------+
| id | id_client | id_product |
+----+-----------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
+----+-----------+------------+
Je souhaite que le résultat de ma jointure ressemble à ça mais impossible d'y parvenir :
Résultat attendu
+--------+------------------------------+
| USER | PRODUCT(S) |
+--------+------------------------------+
| user1 | service1, service2 |
| user2 | service1, service3 |
| user3 | service4 |
| user4 | service1, service2, service3 |
+--------+------------------------------+
Voila la commande que j'utilise et son résultat :
SELECT users.name as "USER", products.name as "PRODUCT(S)"
FROM users
LEFT JOIN commands ON users.id = commands.id_client
INNER JOIN products ON commands.id_product = products.id
ORDER BY users.name ASC;
Résultat obtenue
+-------+------------+
| USER | PRODUCT(S) |
+-------+------------+
| user1 | service1 |
| user1 | service2 |
| user2 | service1 |
| user2 | service3 |
| user3 | service4 |
etc...
En mysql j'aurai utilisé GROUP_CONCAT mais qui n'est pas une fonction postgres valide.
j'ai tenté le GROUP BY clients.name mais il me sors une erreur et veux que je rajoute égallement le champ products.name du coup il me fait juste une sorte de ORDER_BY mais ne concaténe pas les résultats
j'ai tenté un SELECT DISTINCT(clients.name) mais il me sort uniquement le premier produit commandé par l'utilisateur....
Je commence à secher et mes connaissances postgres sont trop faible.
Un connaisseur peut il m'aider ? :)
Merci d'avance
--
N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
A voir également:
- Postgresql aggregate function
- Resultats foot - Télécharger - Vie quotidienne
- Copier coller multiple - Guide
- Liste déroulante choix multiple excel - Guide
- Ecran multiple pc - Guide
- Les résultats concernant les personnes sont limités - Accueil - Confidentialité
2 réponses
Bonjour,
je ne connais pas du tout, mais ceci semble répondre à ta problématique :
https://www.postgresqltutorial.com/postgresql-aggregate-functions/postgresql-array_agg-function/
A+
je ne connais pas du tout, mais ceci semble répondre à ta problématique :
https://www.postgresqltutorial.com/postgresql-aggregate-functions/postgresql-array_agg-function/
A+
Exileur
Messages postés
1621
Date d'inscription
Statut
Membre
Dernière intervention
150
Merci pour ta réponse, je vais me cultiver un peu plus et lire ce que tu m'a envoyé !!
Bon, il a suffit que je pose la question ici pour trouver la réponse ....
Voila ce que j'utilise comme commande pour obtenir le résultat attendu :
Je clos la demande qui est résolue.
Voila ce que j'utilise comme commande pour obtenir le résultat attendu :
SELECT users.name as "USER", string_agg(DISTINCT products.name, ', ') as "PRODUCT(S)"
FROM users
LEFT JOIN commands ON users.id = commands.id_client
INNER JOIN products ON commands.id_product = products.id
GROUP BY users.name
ORDER BY users.name ASC;
+--------+------------------------------+
| USER | PRODUCT(S) |
+--------+------------------------------+
| user1 | service1, service2 |
| user2 | service1, service3 |
| user3 | service4 |
| user4 | service1, service2, service3 |
+--------+------------------------------+
Je clos la demande qui est résolue.