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

XQUERY/SGBD XML Discussion :

Fonction AVG (MOYENNE ) sur base d'attributs [XQUERY]


Sujet :

XQUERY/SGBD XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Points : 12
    Points
    12
    Par défaut Fonction AVG (MOYENNE ) sur base d'attributs
    Bonjour, je cherche à calculer une moyenne sur base d’attributs :

    A partir d’un fichier XML :
    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
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <?xml-stylesheet href="class.xsl" type="text/xsl" ?>
    <université>
    <étudiant><nom>Réjean Tremblay</nom>
    <cours sigle="INF8430" note="89" />
    <cours sigle="INF1030" note="69" />
    <cours sigle="INF1230" note="75" /></étudiant>
    <étudiant><nom>Martin Lambert</nom>
    <cours sigle="INF8430" note="75" />
    <cours sigle="INF1030" note="72" />
    <cours sigle="INF1230" note="73" /></étudiant>
    <étudiant><nom>Luc Alain</nom>
    <cours sigle="INF9430" note="39" />
    <cours sigle="INF1030" note="89" />
    <cours sigle="INF1230" note="79" /></étudiant>
    <étudiant><nom>Olive Saint-Amant</nom>
    <cours sigle="INF8430" note="91" />
    <cours sigle="INF1230" note="99" /></étudiant>
    </université>
    Je cherche à obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <maliste>
    <cours sigle="INF8430">85</cours>
    <cours sigle="INF1030">76.66666666666667</cours>
    <cours sigle="INF1230">81.5</cours>
    <cours sigle="INF9430">39</cours>
    </maliste>
    J’ai notamment essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <maliste>
    {for $s in distinct-values(doc("Ex2.xml")//@sigle)
    return
    <cours sigle="$s">
    {avg(for $n in {cours[current()/@sigle=@sigle]/@note}
    return $n)
    }
    </cours>
    }
    </maliste>
    Et ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <maliste>
    {for $s in distinct-values(doc("Ex2.xml")//@sigle)
    return
    <cours sigle="$s">
    {avg(for $n in ./@note
    return $n)
    }
    </cours>
    }
    </maliste>

    Bref, après plusieurs tentatives de codes différents, il me semblait que celui-ci était le plus (simple) logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <maliste>
    {for $c in doc("Ex2.xml")/universite/etudiant/cours
    return
    <cours sigle="{($c/@sigle)[1]}">
    {avg(for $n in $c/@note
    return $n)
    }
    </cours>
    }
    </maliste>
    Mais, à mon grand désespoir , il ne me retourne que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?xml version="1.0" encoding="UTF-8"?
    <maliste>
       <cours sigle="INF8430">89</cours>
       <cours sigle="INF1030">69</cours>
       <cours sigle="INF1230">75</cours>
       <cours sigle="INF8430">75</cours>
       <cours sigle="INF1030">72</cours>
       <cours sigle="INF1230">73</cours>
       <cours sigle="INF9430">39</cours>
       <cours sigle="INF1030">89</cours>
       <cours sigle="INF1230">79</cours>
       <cours sigle="INF8430">91</cours>
       <cours sigle="INF1230">99</cours>
    </maliste>
    Quelque chose doit m’échapper, pouvez-vous m’éclairer ?

    Un grand merci d'avance !

    Radu

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    J’ai notamment essayé ça :
    <maliste>
    {for $s in distinct-values(doc("Ex2.xml")//@sigle)
    return
    <cours sigle="$s">
    {avg(for $n in {cours[current()/@sigle=@sigle]/@note}
    return $n)
    }
    </cours>
    }
    </maliste>
    Regardez bien les différences...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <maliste>
    {
    for $s in distinct-values(doc("Ex2.xml")//@sigle)
    return
    <cours sigle="{$s}">
    {avg(for $n in doc("Ex2.xml")//cours[@sigle=$s]/@note return $n)}
    </cours>
    }
    </maliste>

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Russie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 14
    Points : 12
    Points
    12
    Par défaut SUPER ! MERCI tsuji ! :)
    SUPER ! MERCI tsuji !

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

Discussions similaires

  1. Moyenne conditionnée fonction AVG ?
    Par ZERS dans le forum Oracle
    Réponses: 5
    Dernier message: 24/11/2011, 10h38
  2. Fonction AVG(CombustibilConsumat) moyenne combustible consomme
    Par mihaispr dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 12/11/2009, 12h13
  3. Réponses: 1
    Dernier message: 21/07/2009, 11h51
  4. Réponses: 8
    Dernier message: 14/02/2007, 10h37

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