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 :

Problème avec une avg


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 65
    Points : 46
    Points
    46
    Par défaut Problème avec une avg
    Bonjour,

    j'ai des données comme suit:
    chaque personne a une note sur 100
    et la troisième colonne désigne si cette personne est évalué ou pas encore

    nom    | note | de 
    PERS1 |  0   |  0 
    PERS2 | 30  |  1 
    PERS3 | 10  |  1 
    PERS4 | 30  |  1 
    PERS5 | 44  |  1 
    je voudrais avoir une requête qui pourrait me faire la moyenne des notes mais sans calculer ceux qui n'ont pas été évalués grâce à la colonne de dans la table

    dans ce cas la requête doit calculer 114/4 donc le résultat c'est 28.5

    j'ai déjà tenté une requête mais celle la calcule 114/5 et le résultat obtenu est 22.8 ce qui est faux

    voici ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ROUND(avg(note)) from tab_note where de<>0
    Merci

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 168
    Points : 7 421
    Points
    7 421
    Billets dans le blog
    1
    Par défaut
    Ça me semble bien étrange comme résultat...

    Parce que ta requête est bonne !

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour

    oui la requête est correcte; au détail qu'elle ne peut te renvoyer le résultat que tu indiques.

    Dans la requête, tu places un Round qui arrondit le résultat, il doit donc renvoyer 22 et non 22.8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select avg(note) * 1.00 
        from tab_note 
        where de = 1
    Le "1.00" est pour envoyer le résultat avec 2 chiffres après la virgule.
    Si "de" ne contient que des 0 et des 1, il est plus judicieux de mettre "de = 1"

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Si "de" ne contient que des 0 et des 1, il est plus judicieux de mettre "de = 1"
    +1

    Dans la requête, tu places un Round qui arrondit le résultat, il doit donc renvoyer 22 et non 22.8.
    Sauf que 114/4=28,5


    Moi je n'ai pas le soucis:
    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
    16
    17
    18
    19
    WITH TAB (nom ,note ,de)
    AS(
    SELECT
    'PERS1' ,0,0 
    UNION ALL
    SELECT
    'PERS2' ,30,1
    UNION ALL
    SELECT
    'PERS3' ,10,1 
    UNION ALL
    SELECT
    'PERS4' ,30,1 
    UNION ALL
    SELECT
    'PERS5' ,44,1 )
    SELECT AVG(CAST (note AS DECIMAL(4,2)))
    FROM TAB
    WHERE de<>0
    Me donne bien 28.5

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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