IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Aggréger plusieurs lignes


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut Aggréger plusieurs lignes
    Bonjour,

    Je rencontre un problème en Sql. Voici un exemple de table :

    element | type
    ------------------
    1 | GET
    2 | POST
    1 | POST
    1 | TEST
    2 | TEST

    Le couple (element, type) formant une clef primaire.
    Est-il possible en sql d'obtenir le résultat suivant :

    1 GET, POST, TEST
    2 POST, TEST

    Il ne m'est pas possible d'utiliter des triggers ou des procédures stockées au niveau de la Db. Uniquement requête sql de selection. J'utilise mysql.

    Merci d'avance pour toute l'aide que vous saurez m'apporter,
    Quentin D.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Regardez du côté de GROUP_CONCAT :
    http://dev.mysql.com/doc/refman/5.0/...functions.html

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour la rapidité de réponse !
    J'ignorais l'existence de cette fonction d'aggrégation..

    Je vais tester tout celà !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 786
    Points
    30 786
    Par défaut
    Toutefois cette réponse ne convient qu'aux utilisateurs de MySQL, qui est le seul SGBD à proposer cette fonction inconnue de la norme.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Ce sont les nouveautés qui finissent par faire évoluer la norme, al1 !

    D'ailleurs, MySQL a déjà réussi à rallier un acteur mineur du marché des SGBD :
    Sous Oracle 11gR2, on a LISTAGG !
    http://download.oracle.com/docs/cd/E...nctions087.htm

    (Ouais Waldar, j'ai bien retenu la leçon !)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 543
    Points
    52 543
    Billets dans le blog
    5
    Par défaut
    Sauf que ces deux opérateurs GROUP_CONCAT et LISTAGG posent un problème relationnel de de fond que peu de gens voit et qui peut leur fournir des résultats faux....

    Débattu maintes fois...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Le problème relationnel étant que le résultat dépend du plan d'exécution (de l'ordre dans lequel les lignes sont agrégées) ?

    Les deux fonctions intègrent une clause spécifiant l'ordre... rendant le résultat quasi-déterministe. Après, les états d'âmes qui peuvent rester par rapport à l'algèbre relationnelle sont du même ordre que pour les fonctions analytiques, non ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 760
    Points : 52 543
    Points
    52 543
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Le problème relationnel étant que le résultat dépend du plan d'exécution (de l'ordre dans lequel les lignes sont agrégées) ?
    Tout à fait et ce que beaucoup de gens oublient. C'est pourquoi une requête récursive permet de maîtriser mieux la chose.

    Les deux fonctions intègrent une clause spécifiant l'ordre... rendant le résultat quasi-déterministe. Après, les états d'âmes qui peuvent rester par rapport à l'algèbre relationnelle sont du même ordre que pour les fonctions analytiques, non ?
    Pas tout à fait, car vous oubliez que dans les "fonctions analytiques" (terme totalement abusif d'ailleurs, car faux, la norme les appelant fonction de fenêtrage) il y a en fait deux cas différents :
    • les fonctions analytiques qui sont l'application de fonction d'agrégation sur des ensembles particuliers dit fenêtres
    • les fonctions de classement (ranking) qui elles obligent à avoir un ordre particulier.

    Enfin, l'ensemble de ces fonctions constituent des fonctions de fenêtrage dont le but est de rajouter de l'information à la fenêtre des données du résultat qui lui est purement relationnel. C'est pourquoi elle ne peuvent en aucun cas être directement filtrées dans une clause WHERE ou HAVING, car elles s'exécutent après que le résultat de la requête ait été calculé.

    Notez bien que seules les fonctions de classement ne sont pas relationnelles alors que les fonctions analytique le sont bel et bien !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [langage] mettre plusieurs lignes en commentaire
    Par perlaud dans le forum Langage
    Réponses: 4
    Dernier message: 24/05/2004, 15h32
  2. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  3. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  4. Réponses: 14
    Dernier message: 09/04/2004, 13h44
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo