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

SQL Oracle Discussion :

mélanger group by et distinct


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut mélanger group by et distinct
    Bonjour,
    Si j'ai le schéma suivant :


    je veux connaitre le poids total de mes vélo appartenant aux categories cat1 et cat2.
    J'exécute donc la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select id_velo,sum(poids)
    from velo,appartient,categorie
    where velo.id_velo=appartient.id_velo
    and appartient.id_categorie=categorie.id_categorie
    and lib_categorie in ('cat1','cat2')
    group by id_velo
    le probleme est que si un vélo appartient à la categorie cat1 et cat2, il sort deux fois, et son poids sera au total compté double. la est le probleme.
    Tata

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

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

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

    Si j'ai bien compris :
    Tu veux le poids de chaque velo.
    Dans la table velo, id_velo est l'identifiant. Donc à priori, il n'y a dans cette table qu'un seul poids pour un velo. Tu n'as donc à priori pas besoin de GROUP BY.

    Ton seul problème est donc de limiter la requête à des catégories.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT id_velo, poids
    FROM velo a
    WHERE EXISTS (SELECT NULL
                          FROM appatient b 
                            JOIN categorie c ON b.id_categorie = c.id_categorie
                         WHERE b.id_velo = a.id_velo
                             AND c.libelle IN ('cat1','cat2'))

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    merci de ta réponse.

    n'y a t'il pas une autre possibilité ? je pense que je ne peux pas implémenter ta solution. (en fait la requete va etre générée avec business objects).

    peut etre avec un case dans le select ?

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

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Si tu gardes ta première formule (avec group by), tu peux simplement diviser par count(*)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 270
    Par défaut
    Effectivement...
    Je vais voir si ca peut convenir à mon cas.
    Merci de ton aide.

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez générer des sous requêtes avec BO, du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT
        id_velo,
        poids
    FROM
        velo
    WHERE
        id_velo IN
        (SELECT
             b.id_velo 
         FROM
             appartient b 
             INNER JOIN categorie c
               ON b.id_categorie = c.id_categorie
         WHERE
             c.libelle IN ('cat1', 'cat2'))
    C'est presqu'aussi bien que le exists, et plus propre que la division par count(*) !

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    je veux connaitre le poids total de mes vélo appartenant aux categories cat1 et cat2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select UNIQUE id_velo,poids
    from velo,appartient,categorie
    where velo.id_velo=appartient.id_velo
    and appartient.id_categorie=categorie.id_categorie
    and lib_categorie in ('cat1','cat2')
    Ou est le piège?

Discussions similaires

  1. Group by ou Distinct ?
    Par Florian54 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/12/2014, 10h57
  2. Problème de group by ou distinct
    Par Stephane_br dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 02/09/2011, 21h24
  3. Requête avec des groupes de conditions distincts
    Par abdelhamidem dans le forum SQL
    Réponses: 2
    Dernier message: 08/03/2011, 18h00
  4. Distinct, group by et order by
    Par gloubi dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/11/2006, 16h53
  5. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10

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