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

 MySQL Discussion :

Problème de compréhension de requêtes


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 67
    Par défaut Problème de compréhension de requêtes
    Bonjour,

    je débute en sql et j'ai beaucoup de mal à déja comprendre la significations de 2 requêtes sql sur la table R(A,B,C) suivante:

    ________________
    R
    ________________
    A-------B------C
    ________________
    X2------9 -----2
    X2------11-----8
    X1------6------4
    X2------4------5
    ________________

    La 1ère requête est la suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A, SUM(C) AS SOMME_C
    FROM R
    WHERE B>4
    GROUP BY A
    HAVING COUNT(*)>1;
    La 2ème requête est a suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT A, SUM(C) AS SOMME_C
    FROM R
    WHERE B>4
    GROUP BY A
    HAVING SUM(B)>1;


    voila ce que j'ai réussi à comprendre (c'est maigre ):

    SELECT A signifie qu'il faudra garder uniquement la colonne A
    FROM R WHERE B>4< signifie que les données seront extraites de la table R et l'élement B doit être supérieur à 4.

    Le résultat de ces deux requêtes est le suivant (selon phpmyadmin que l'on trouve sur wamp):

    requête 1:
    -----------------------
    A SOMME_C
    X1 6
    -----------------------

    requête 2:
    -----------------------
    A SOMME_C
    X1 6
    X2 8
    ---------------------

    que signifie SUM(C) AS SOMME_C et HAVING SUM(B)>1 et comment est-il arrivé à ce résultat?

    merci pour votre aide

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour,

    Tu es certain d'avoir exécuté la bonne première requête ? Parce que, personnellement, je ne pense pas que ce soit le bon résultat.
    Si je ne me trompe pas, la première requête devrait renvoyer :
    -----------------------
    A SOMME_C
    X2 10
    -----------------------

    Et la seconde :
    -----------------------
    A SOMME_C
    X1 6
    X2 10
    ---------------------


    Prenons cette première requête. Comme il y a une fonction d'agrégation (la fonction SUM), il faut la lire avec la ligne GROUP BY.
    Cette requête fait la somme des C sur pour tous les groupes de A. On doit toujours (ou presque) mettre dans la clause GROUP BY les colonnes du SELECT qui ne sont pas dans une fonction d'agrégation, comme SUM. Ainsi, il faut mettre GROUP BY A dans le cas présent.

    La clause WHERE restreint les lignes utilisées à celles pour lesquelles B est supérieur à 4. Dans le cas présent, ça fait "sauter" la dernière ligne du résultat final. Cette ligne n'est pas prise en compte dans la somme des C.

    La clause HAVING est similaire à la clause WHERE, sauf qu'elle met la condition sur une fonction d'agrégation (la fonction COUNT pour la première requête, la fonction SUM pour la deuxième requête).
    Donc, la première requête ramène la somme de tous les C pour chaque groupe de A au sein desquels B est supérieur à 4. Et la clause HAVING impose qu'il y ait au moins 2 lignes dans chacun de ces groupes.

    La deuxième requête ramène la somme de tous les C pour chaque groupe de 4 au sein desquels B est est supérieur à 4. Et la clause HAVING impose que cette somme des C soit supérieure à 1.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. Problème de formulation de requète
    Par tellitocci dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2004, 05h05
  3. Problème DBExpress et sous requêtes ???
    Par Trulane dans le forum Bases de données
    Réponses: 5
    Dernier message: 26/03/2004, 14h40
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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