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 :

SUM sur un ENUM


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Par défaut SUM sur un ENUM
    Bonjour à tous, j'ai un petit probleme avec une requete qui me permet de faire une somme sur un champ de type ENUM.

    Ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.Axe, i.Effet, SUM(i.Intensite)
    FROM Viglopilo_Axe a, Viglopilo_Influence i, Viglopilo_Projet p
    WHERE a.Id_Projet=p.Id_Projet AND
              p.Client='". $client ."' AND
              i.Id_Axe=a.Id_Axe AND
              i.Effet IS NOT NULL AND
              i.Intensite IS NOT NULL
    GROUP BY a.Axe, i.Effet
    j'obtient le résultat :
    Axe Effet SUM( i . Intensite )
    Axe1 + 5
    Axe1 - 2
    Axe2 + 3
    Axe2 - 3
    Axe3 - 5
    Axe3 +/- 2
    Axe4 + 4
    Axe4 - 3
    Axe4 +/- 2
    alors que quand j'execute la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.Axe, i.Effet, i.Intensite, COUNT(i.Intensite)
    FROM Viglopilo_Axe a, Viglopilo_Influence i, Viglopilo_Projet p
    WHERE a.Id_Projet=p.Id_Projet AND
              p.Client='test' AND
              i.Id_Axe=a.Id_Axe AND
              i.Effet IS NOT NULL AND
              i.Intensite IS NOT NULL
    GROUP BY a.Axe, i.Effet, i.Intensite
    j'obtient le résultat :
    Axe Effet Intensite COUNT( i . Intensite )
    Axe1 + 3 2
    Axe1 + 1 1
    Axe1 - 2 1
    Axe2 + 3 1
    Axe2 + 2 1
    Axe2 - 1 1
    Axe3 - 2 1
    Axe3 - 1 1
    Axe3 +/- 2 1
    Axe4 + 0 1
    Axe4 - 1 1
    Axe4 +/- 2 1
    qui est la bonne réponse.

    Le champ Axe est un text,
    Effet est un enum('-', '+', '+/-'),
    Intensite est un enum('0', '1', '2', '3').

    Pourquoi les deux requetes ne renvoient-il pas des résultats logiques?

  2. #2
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Ingénieur DevOps
    Inscrit en
    Mai 2002
    Messages
    1 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur DevOps
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 214
    Par défaut
    N'y aurait-il pas une erreur de copier coller ?
    Ta première requête doit afficher les 4 valeurs :
    a.Axe, i.Effet, i.Intensite, COUNT(i.Intensite)
    Hors le résultat de ta première requête en contient 3 :
    Axe, effet et somme...
    Alexandre Tranchant
    Ingénieur DevOps pour le Ministère de l'Écologie
    Retrouvez mes articles sur PHP et Symfony

  3. #3
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Par défaut
    Citation Envoyé par Alexandre T
    N'y aurait-il pas une erreur de copier coller ?
    si en effet, enfait ma première requete ne doit pas renvoyer i.Intensite, je corrige ça tout de suite.

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par megane
    si en effet, enfait ma première requete ne doit pas renvoyer i.Intensite, je corrige ça tout de suite.
    Corrige aussi dans le GROUP BY

    Je ne comprends pas ton probleme. Tu peux reexpliquer ton souci ?

  5. #5
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Par défaut
    désolé, je me suis trompée sn corrigeant ma première requette, cette fois-ci elle doit être bonne.

    mon probleme vient du fait que sur le champ Intensité (de type enum qui prend les valeurs 0, 1, 2 et 3) le "SUM" n'est pas égal au "COUNT*valeur du champ" et je ne comprend pas pourquoi.

    Est-ce plus clair?

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Le SUM et le COUNT sont deux fonctions totalement distinctes.

    COUNT renvoit un nombre d'enregistrements tandis que SUM somme les valeurs d'une colonne.

    ex si tu as

    Champ1 valeur
    A 1
    B 2
    C 3
    A 1
    B 3
    un champ1, sum(valeur) Group By champ1 te ramera
    A 2
    B 5
    C 3
    Par contre un champ1, count(valeur) group by champ1
    A 2
    B 2
    C 1
    Le premier te renvoie la somme des valeurs de la colonne valeur, groupée par champ1, tandis que le second te renvoi le nombre de lignes groupées par champ1

    J'espere avoir repondu a ta question
    Bon courage

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

Discussions similaires

  1. Problème de SUM sur une requête SQL
    Par Lapicure dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 12/06/2007, 11h51
  2. Requete SUM sur une table avec critère sur une autre
    Par wail00 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/05/2007, 16h58
  3. Problème de SUM sur une absence de valeur
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/01/2007, 23h33
  4. Utilisation de SUM() sur des 'real'
    Par f.le.chat dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/06/2006, 15h16
  5. Sum sur un champ Time
    Par Régent dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/02/2005, 23h39

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