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 Firebird Discussion :

Requete pour calcul de moyenne avec semestre


Sujet :

SQL Firebird

  1. #21
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Quand une requête devient un peu trop complexe à mon gout, je décompose cette requête, en stockant un résultat intermédiaire dans une table temporaire.
    c'est ce que fait une CTE sans avoir de structure de table temporaire GTT à créer "manuellement"
    J'aurai tout aussi bien, pour la première requête (celle en interne), créer une View, et pour la seconde requête, travailler sur cette View.
    encore une fois la view est à créer et est stockée dans la base

    Mais n'est-ce pas moins performant de procéder ainsi que d'écrire une requête classique ?
    j'attends ta proposition sur "l'exercice", la proposition que tu avais faite ne correspondant pas exactement puisque tu ne prenais en compte qu'un seul élève, donc pas de clause GROUP BY

    Sinon, en MySql, quand le besoin s'en fait sentir, je vais créer une procédure stockée.
    bien sur, une procédure stockée était possible mais encore une fois, celle-ci sera enregistrée dans la base

    Encore que, quand j'étais administrateur DB2, il nous était interdit de faire des procédure stockée, car cela dégradait les performances du SGBDR.
    DB2 n'est pas Firebird, je ne vois pas en quoi une procédure stockée dégraderait les performances (sauf à son utilisation bien sûr)

    C'est pourquoi, je ne voie pas trop l'intérêt du CTE dans une production, sinon pour dégrader les performances.
    mais une CTE (du moins avec Firebird) ne dégrade pas les performances ! Que fait-elle ? elle crée en mémoire un ensemble de données pour utilisation comme le ferait un SELECT FROM SELECT (table dérivée)

    Ma question était surtout sur l'apport que le CTE procure vis-à-vis d'un développement classique.
    Si c'est pour introduire dans une seule écriture (le CTE) une décomposition, qui prendrait plusieurs étapes dans une méthode classique, n'est-ce pas résoudre un problème de fond avec une astuce qui peut coûter cher en performance ?
    le cher en performance reste à prouver
    Et si son intérêt est de faire la récursivité, je n'en voie pas trop l'intérêt dans le milieu bancaire dont je suis issu.
    un de ses intérêts et si dans le milieu bancaire tu n'en vois pas je peux écrire avec certitude que dans le milieu industriel il peut y en avoir (par exemple des nomenclatures produits arborescente) ou pour des statistiques
    Firebird : les tables dérivées

    Et ce que j'entends par "un problème de fond", c'est peut-être de vouloir résoudre dans le SGBDR, qui n'est pas adapté à cela, un problème qui concerne un langage extérieur, comme Pascal (Delphi).
    bien sur, on peut utiliser la méthode "ancienne école" lorsque le SQL n'existait pas et que les fichiers étaient séquentiels (encore que je doute que beaucoup de "jeunes programmeurs" aient une idée de cette méthode , à ces derniers, pour information, cela se nommait dans les années 80 "rupture de contrôle")
    Et non, je ne suis pas d'accord sur le fait que le SGBDR n'est pas adapté à cela, les CTE font parties de la norme depuis 1999 et ont été ajoutée à Firebird avec la version 2.1 (par contre je serais bien en peine de donner une date, début 2002 je crois ?)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #22
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    c'est ce que fait une CTE sans avoir de structure de table temporaire GTT à créer "manuellement"
    Autre avantage d'une CTE par rapport à des select imbriqués : c'est plus facile à lire et donc à maintenir

  3. #23
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Citation Envoyé par Sergiomaster
    j'attends ta proposition sur "l'exercice", la proposition que tu avais faite ne correspondant pas exactement puisque tu ne prenais en compte qu'un seul élève, donc pas de clause GROUP BY
    Est-ce ceci que tu voulais :
    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
    20
    21
    22
    23
    24
    25
    with temp as (      select an_sconote, num_etudiant, semestre    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, semestre
                  union select an_sconote, num_etudiant, 'annuel'    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant
                  union select an_sconote, num_etudiant, nom_matiere as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, nom_matiere)
    select * from temp;
     
    AN_SCONOTE NUM_ETUDIANT classement               moyenne
    ========== ============ ========== =====================
    2008-2009           256 annuel                     10.43
    2008-2009           256 matière 01                 12.20
    2008-2009           256 matière 02                  8.20
    2008-2009           256 matière 03                  6.40
    2008-2009           256 matière 04                  9.60
    2008-2009           256 matière 05                 12.05
    2008-2009           256 matière 06                 11.05
    2008-2009           256 matière 07                 14.40
    2008-2009           256 matière 08                 10.60
    2008-2009           256 matière 09                 16.50
    2008-2009           256 matière 10                 13.00
    2008-2009           256 matière 11                  9.00
    2008-2009           256 matière 12                 10.00
    2008-2009           256 matière 13                 12.00
    2008-2009           256 matière 14                  6.25
    2008-2009           256 matière 15                  5.25
    2008-2009           256 semestre 1                 10.56
    2008-2009           256 semestre 2                 10.28
    J'ai regroupé les trois résultats, à savoir :
    --> la moyenne annuelle
    --> la moyenne semestrielle
    --> la moyenne par matière

    et ce par année scolaire et par élève.

    Citation Envoyé par Sergiomaster
    mais encore une fois, celle-ci sera enregistrée dans la base
    Je ne comprends pas bien ta remarque. En quoi cela pose problème de stocker soit une table temporaire, soit une View, soit une procédure stockée ou quoi que ce soit d'autre dans la base ?
    Au final, il faudra bien stocker la requête quelque part, non ?

    Citation Envoyé par Sergiomaster
    DB2 n'est pas Firebird, je ne vois pas en quoi une procédure stockée dégraderait les performances (sauf à son utilisation bien sûr)
    Tu oublies un tout petit détail, en DB2, on peut se retrouver à quelques milliers de personnes à travailler sur la même table !!!
    Alors qu'en MySql ou en FireBird, au grand maximum, il y a une dizaine de pékins qui désirent faire des accès.
    Et de plus, on travaillait en mode transactionnel, c'est-à-dire en CICS pour gérer les accès en écritures où à un instant donné, un seul utilisateur à accès.

    Sur les grands comptes, à une certaine époque, ils nous étaient interdit de faire des développements spécifiques au cœur même du SGBDR DB2.
    Tout ce dont nous avions le droit de faire, ce sont des requêtes simples. Il était interdit de faire des requêtes avec jointures.
    Oui, mais comment faisait-on si on avait besoin de faire des jointures ?
    Et bien, on faisant cela en cobol. C'est comme si tu avais plusieurs fichiers en entrée où l'on faisait des lectures séquentielles avec multicritères et en parallèles.
    Lorsque l'on faisait un balayage de la totalité de la table si celle-ci était énorme, on déchargeait cela sous la forme d'un fichier séquentielle, quel l'on traitait en cobol, puis on rechargeait le fichier dans la table. C'était bien plus rapide de procéder ainsi que de passer par le SGBDR.
    Bien sûr, il faut aussi distinguer le batch qui se fait généralement la nuit, et le mode transactionnel pour accéder ponctuellement à ton application.

    Cela me surprend toujours, quand je voie un utilisateur demander de l'aide sur une jointure de quinze tables. J'ai l'impression qu'il à mal dessiner sa base de données.
    Oui, mais en micro, voire en mini, on ne travaille pas de la même façon qu'en gros système.

    Citation Envoyé par Sergiomaster
    bien sur, on peut utiliser la méthode "ancienne école" lorsque le SQL n'existait pas et que les fichiers étaient séquentiels (encore que je doute que beaucoup de "jeunes programmeurs" aient une idée de cette méthode ...
    Je ne préconise pas de revenir à d'anciennes méthodes de programmation, mais il est quand même surprenant que les jeunes ne savent pas bien programmer.
    Qui sait faire aujourd'hui, une fusion entre trois fichiers séquentielle ayant le même critère ? C'est-à-dire lire en parallèle ces trois fichiers et écrire dans le fichier résultat les enregistrements.
    Sachant que pour des enregistrements ayant le même critère, tu dois les fusionner en un seul.

    Citation Envoyé par Sergiomaster
    ... , à ces derniers, pour information, cela se nommait dans les années 80 "rupture de contrôle")
    Tu voulais parler de "rupture de séquence".
    Le fameux losange des organigrammes désignent un contrôle et correspond à un "si ... alors ... sinon finsi".
    Et ce contrôle provoque en général une rupture dans la séquentialité du traitement.

    Citation Envoyé par SergioMaster
    Et non, je ne suis pas d'accord sur le fait que le SGBDR n'est pas adapté à cela, les CTE font parties de la norme depuis 1999 et ont été ajoutée à Firebird avec la version 2.1 (par contre je serais bien en peine de donner une date, début 2002 je crois ?)
    Quelle est le rôle d'un SGBDR ? C'est bien de stocker des données et ou de les extraire. Le rôle des calculs incombent au langage de programmation pas au SGBDR.
    Je voie fréquemment des gens utiliser le SGBDR pour faire de la présentation de données, comme par exemple mettre les dates sous un autre format.
    Ou encore se servir des fonctions du SGBDR au lien de ceux du langage de programmation car cela semble plus facile à faire.
    Voire utiliser une petite table dans le SGBDR comme un tableau mémoire alors que normalement cela est le rôle du langage de programmation.
    Et après on s'étonne que l'extraction prend des heures ???

    Quand on dit qu'une table est en mémoire, cela ne vaut pas dire en mémoire dans le langage de programmation, mais gérer en mémoire par le SGBDR, dont non accessible directement par le langage.
    Il ne faut pas oublier que le SGBDR est sur un serveur autre que celui du langage de programmation. Et de ce fait, il y a des échanges continuelles entre ceux deux entités.
    C'est cela qui prend du temps !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  4. #24
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Est-ce ceci que tu voulais :
    [code]with temp as ...[code]
    tu triches, tu avais dit que les CTE étaient inutiles or tu en utilise une ! Or le défi était :
    écrire une requête classique
    Qui sait faire aujourd'hui, une fusion entre trois fichiers séquentielle ayant le même critère ?
    moi

    Quelle est le rôle d'un SGBDR ? C'est bien de stocker des données et ou de les extraire.
    d'accord
    Le rôle des calculs incombent au langage de programmation pas au SGBDR.
    j'estime que les agrégats ne font pas partie des calculs, les CTE non plus

    Tu voulais parler de "rupture de séquence".
    oui, si je les appelle "contrôle" c'est peut être parce que j'ai commencé (ou plutôt affiné après l'initiation "universitaire") l'informatique au VENEZUELA donc cours en espagnol mais par un Gringo (je ne dirais pas Américain , car un Vénézuélien ou un Brésilien sont aussi Américain que lui) du coup ma traduction en langue française a peut être péché

    Pour ce qui est du rôle des SGBDR je me réfère aux normes. Dans le cas présent les CTE font partie de la norme, l'implémentation existe dans Firebird donc : j'utilise. Les fonctions (externes ou internes) sont dans la norme donc .....
    Comparer DB2, MySQL et Firebird me passe au dessus de la tête, contrairement à ce que tu crois par contre je pense que tu pourrait être surpris du nombre de personne pouvant en même temps interroger une même table, je n'avancerais pas la même hypothèse pour MySQL pourtant il me semble que des systèmes de CHAT s'appuient dessus
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #25
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut SergioMaster.

    Citation Envoyé par SergioMaster
    tu triches, tu avais dit que les CTE étaient inutiles or tu en utilise une ! Or le défi était : écrire une requête classique
    A vrai dire, je ne me suis pas trop cassé la tête. J'ai pris ma requête dite classique, et j'ai mis autour ce qui me semble être la syntaxe d'un CTE, d'où :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          select an_sconote, num_etudiant, semestre    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, semestre
    union select an_sconote, num_etudiant, 'annuel'    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant
    union select an_sconote, num_etudiant, nom_matiere as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, nom_matiere);
    Si tu n'es pas satisfait de cette requête, dit moi ce que tu veux que je fasse.

    Citation Envoyé par SergioMaster
    Citation Envoyé par Artemus24
    Qui sait faire aujourd'hui, une fusion entre trois fichiers séquentielle ayant le même critère ?
    moi
    Peut-être que tu as connu, comme moi, l'évolution de l'informatique et de ce fait, tu es passé par différentes étapes.
    J'ai connu l'époque des cartes perforées et de l'art de découper un programme de 256 Ko, pour le faire tourner dans une mémoire que de 64 Ko.
    C'est-à-dire sans mémoire virtuelle où tu dois gérer toi même la mémoire, ainsi que les chargements et déchargements de code. En tout cas, c'était très formateur.

    Citation Envoyé par SergioMaster
    Pour ce qui est du rôle des SGBDR je me réfère aux normes.
    Je suis allergique aux normes !

    Si tu veux parler de la syntaxe, je veux bien. Mais si tu parles de ce que la norme préconise (ou autorise) à faire ou à ne pas faire, là, je ne suis pas d'accord.
    Si un SGBDR t'autorise à faire quelque chose qui t'est utile, parce que tu as la possibilité de le faire, alors que la norme te l'interdit, je ne voie pas pourquoi je devrai me priver de cet avantage.
    J'appelle cela faire compliqué quand on peut faire simple. La norme, c'est une juste une façon de parler le même langage afin de bien se faire comprendre. Elle ne doit pas devenir contraignante.

    [quote="SergioMaster"]par contre je pense que tu pourrais être surpris du nombre de personne pouvant en même temps interroger une même table[quote]
    Je ne suis pas au courant de toutes les dernières nouveautés dans le domaine des SGBDR, surtout dans la micro ou la mini.
    Mais à mes yeux, il n'y a rien de mieux que DB2, vu que je viens du gros système. Je ne vais pas renier mes premiers amours.
    Je n'oublie pas non plus le IDS II de Bull et Socrate, la première base de données que j'ai connu à l'IUT.

    Il ne faut pas oublier qu'avant la micro ou la mini, il y avait déjà le gros système. Pratiquement tout ce qui existe a été imaginé en gros système.
    Maintenant, il y a une divergence assez nette car les besoins ne sont plus du tout les mêmes. C'est ce que je ressens.

    Un petit jeune n'aura pas la même vision du monde informatique que moi car son parcours est différent du mien.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #26
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Artemus24 Voir le message
    Mais à mes yeux, il n'y a rien de mieux que DB2, vu que je viens du gros système.
    ça se voit

    Peut-être que tu as connu, comme moi, l'évolution de l'informatique et de ce fait, tu es passé par différentes étapes.
    J'ai connu l'époque des cartes perforées et de l'art de découper un programme de 256 Ko, pour le faire tourner dans une mémoire que de 64 Ko.
    C'est-à-dire sans mémoire virtuelle où tu dois gérer toi même la mémoire, ainsi que les chargements et déchargements de code. En tout cas, c'était très formateur.
    Oui, j'ai connu tout ça (on croirait entendre des vétérans de la guerre)
    je ne suis pas "encore" à la retraite, et loin du compte à cause de mes années à l'étranger hors entreprise française mais moi aussi j'ai connu les cartes perforées, les gros , moyens puis mini systèmes ( pas les BULL, j'irais même à dire heureusement par gros à priori, mais les IBM) avant d'aborder la micro, quoique j'ai eu une courte période Apple 2E entre gros et moyens d'abord UNIX avant de passer PROLOGUE (tiens revoilà Bull qui pointe son nez) puis Windows et LINUX. J'ai donc connu toutes ces étapes et ce sur divers terrains (de l'enseignement à l'industrie)
    L'enseignement m'a poussé à trouver toutes sortes d'exemples pour "forcer" mes élèves à réfléchir avant de coder
    L'industrie m'a appris à répondre a des besoins on ne peut plus divers (Automobile,Hôtel, Douane, Textile, Chaussure, Chimie, Fromagerie et même compagnie de navigation) et souvent mal formulés (c'est bien beau la théorie, les méthodes mais la pratique ça n'a pas de prix et montre les lacunes des méthodes sauf en cas de maitrise absolue)

    Mon maitre mot : "ADAPTATION" quoique j'ai plus de mal qu'avant.

    pas mal pour une deuxième carrière, dans ma première vie (ma jeunesse) j'étais scaphandrier << ça ne s'invente pas
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #27
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut SergioMaster.

    Citation Envoyé par SergioMaster
    Oui, j'ai connu tout ça (on croirait entendre des vétérans de la guerre)
    Je pensais plutôt aux deux vieux (Statler et Waldorf) du Muppet Show.



    Citation Envoyé par SergioMaster
    c'est bien beau la théorie, les méthodes mais la pratique ça n'a pas de prix et montre les lacunes des méthodes sauf en cas de maîtrise absolue
    Je suis entièrement de ton avis, d'où mon allergie aux normes. Seul compte la pratique !
    Après tout, le travail que l'on nous demande de faire, est la mise en oeuvre d'une solution issue de notre connaissance afin de répondre à un besoin.
    C'est le résultat final qui compte et non la façon dont on l'obtient. Encore que, mes deux critères restent la volumétrie et la performance.

    Citation Envoyé par SergioMaster
    pas mal pour une deuxième carrière, dans ma première vie (ma jeunesse) j'étais scaphandrier << ça ne s'invente pas
    Je n'ai fait que de l'informatique dans les SSII et essentiellement dans le gros système (BULL et IBM), un peu de Mini et pas du tout de la Micro.
    Coté métier du client, surtout le milieu bancaire et un peu dans les assurances.

    Pour revenir à nos moutons, voici un exemple classique, si tu veux simuler le CTE :
    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
    20
    21
    22
    23
    24
    25
    select * from (     select an_sconote, num_etudiant, semestre    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, semestre
                  union select an_sconote, num_etudiant, 'annuel'    as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant
                  union select an_sconote, num_etudiant, nom_matiere as "classement", avg(moymat) as "moyenne" from test group by an_sconote, num_etudiant, nom_matiere)
    as temp;
     
    AN_SCONOTE NUM_ETUDIANT classement               moyenne
    ========== ============ ========== =====================
    2008-2009           256 annuel                     10.43
    2008-2009           256 matière 01                 12.20
    2008-2009           256 matière 02                  8.20
    2008-2009           256 matière 03                  6.40
    2008-2009           256 matière 04                  9.60
    2008-2009           256 matière 05                 12.05
    2008-2009           256 matière 06                 11.05
    2008-2009           256 matière 07                 14.40
    2008-2009           256 matière 08                 10.60
    2008-2009           256 matière 09                 16.50
    2008-2009           256 matière 10                 13.00
    2008-2009           256 matière 11                  9.00
    2008-2009           256 matière 12                 10.00
    2008-2009           256 matière 13                 12.00
    2008-2009           256 matière 14                  6.25
    2008-2009           256 matière 15                  5.25
    2008-2009           256 semestre 1                 10.56
    2008-2009           256 semestre 2                 10.28
    Je reconnais que l'écriture du CTE me plait mieux que la requête classique.

    Sinon, je pense qu'il n'y a plus rien à dire du problème de devalender, car il a mis son sujet à résolu !

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #28
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Je reconnais que l'écriture du CTE me plait mieux que la requête classique.
    et voilà on y est arrivé
    la remarque d'escartefigue me paraissait tellement une évidence que je ne l'avais même pas mise comme argument.

    Enfin pour clore le débat avec Firebird 3 on aurait certainement pu utiliser le Fenêtrage, clause OVER
    Similar to classical aggregates but does more!
    Provides access to set of rows from the current row
    Chouette
    Introduced SQL:2003 and more detail in SQL:2008
    encore les normes !
    Supported by PostgreSQL, Oracle, SQL Server, Sybase and DB2
    où l'on reparle de DB2

    bref des choses qui empêcherai SQLPro de fulminer
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #29
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Bonsoir à tous

    Je ne sais plus s'il fallait faire un nouveau post ou s'il fallait continuer celui ci malgré qu'il est résolu. j'ai choisi de le continuer pour garder le fil. voilà je pense qu'il y a un décalage au niveau des décimaux je m'explique :

    En prenant l'exemple de Sergiomaster :
    256 0 semestre 1 10.562
    256 0 semestre 2 10.285
    256 1 2008-2009 10.433
    en effet en prenant une calculatrice :
    (10.562+10.285)/2= 10.4235 ce qui est un peu différent de 10.433 ya til un moyen d'y remédier ? avec mes champs note1 et note2 etant de type float.

    merci a tous

  10. #30
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Je ne sais plus s'il fallait faire un nouveau post ou s'il fallait continuer celui ci malgré qu'il est résolu.
    non, c'est bien le bon fil et tu peux toujours le "dérésoudre" (ce que je viens de faire pour toi)

    voilà je pense qu'il y a un décalage au niveau des décimaux
    as tu lu mon post #5 jusqu'au bout ou t'étais tu contenté de rester sur la solution (contenant la petite erreur dans le group by) ?
    je pense hélas que non !
    tu y aurais lu (avec l'exemple sur les marques de voiture table BRANDS) que dans ma proposition la moyenne annuelle (dans ton cas) ne correspondait pas à la moyenne des moyennes par semestre
    notable : la moyenne totale de D (pour Allemagne) , c'est la moyenne des scores 5.25 et non la moyenne des moyennes par marques qui aurait donné 5.333
    que j'aurais pu obtenir ainsi ....
    et tu aurais aussi pu y voir comment gérer le nombre de décimale via le CAST
    il y a très peu de modification à faire voyons voir si tu vas t'en sortir sans que je donne la solution
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #31
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut devalender.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    en effet en prenant une calculatrice : 
    (10.562+10.285)/2= 10.4235 ce qui est un peu différent de 10.433 y-a-t-il un moyen d y remédier ? avec mes champs note1 et note2 etant de type float.
    Tu fais une erreur de raisonnement !
    Comment calcule-t-on les valeurs de 10.562 et 10.285 ?
    C'est un calcul de moyenne ! Et comment calcule-t-on une moyenne ?
    En faisant d'une part la somme de toutes les notes et en divisant ceux-ci par le nombre de notes. C'est une définition.
    Je vais reprendre le tableau ci-après et calculer les deux semestres :
    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
         ID_NOTE NUM_ETUDIANT NOM_MATIERE AN_SCONOTE       NOTE_1       NOTE_2     NOTEEXAM       MOYMAT SEMESTRE
    ============ ============ =========== ========== ============ ============ ============ ============ ==========
               1          256 matière 01  2008-2009         13.00        12.00        12.00        12.20 semestre 1
               2          256 matière 02  2008-2009          9.00         8.00         8.00         8.20 semestre 1
               3          256 matière 03  2008-2009         10.00         5.50         5.50         6.40 semestre 1
               4          256 matière 04  2008-2009         12.00         9.00         9.00         9.60 semestre 1
               5          256 matière 05  2008-2009          6.25        13.50        13.50        12.05 semestre 1
               6          256 matière 06  2008-2009          5.25        12.50        12.50        11.05 semestre 1
               7          256 matière 07  2008-2009          4.00        17.00        17.00        14.40 semestre 1
               8          256 matière 08  2008-2009         13.00        10.00        10.00        10.60 semestre 1
               9          256 matière 09  2008-2009         16.50        16.50        16.50        16.50 semestre 2
              10          256 matière 10  2008-2009         13.00        13.00        13.00        13.00 semestre 2
              11          256 matière 11  2008-2009          9.00         9.00         9.00         9.00 semestre 2
              12          256 matière 12  2008-2009         10.00        10.00        10.00        10.00 semestre 2
              13          256 matière 13  2008-2009         12.00        12.00        12.00        12.00 semestre 2
              14          256 matière 14  2008-2009          6.25         6.25         6.25         6.25 semestre 2
              15          256 matière 15  2008-2009          5.25         5.25         5.25         5.25 semestre 2
    Et voici le calcul des deux semestre :
    --> semestre 1 = (12,20 + 8,20 + 6,40 + 9,60 + 12,05 + 11,05 + 14,40 + 10,60) / 8 = 84,50 / 8 = 10,5625
    --> semestre 2 = (16,50 + 13,00 + 9,00 + 10,00 + 12,00 + 6,25 + 5,25) / 7 = 72 / 7 = 10,255714
    Les résultats confirment bien les valeurs données par la requête.

    Si tu calcules la note annuelle, en reprenant la totalité des notes comme ci-après :
    --> annuelle : (12,20 + 8,20 + 6,40 + 9,60 + 12,05 + 11,05 + 14,40 + 10,60 + 16,50 + 13,00 + 9,00 + 10,00 + 12,00 + 6,25 + 5,25) / 15 = 156.50 / 15 = 10,4333
    tu obtiens bien la moyenne des 15 notes.

    Or ce que tu fais, c'est un biaisage de la note annuelle, en faisant en sorte de donner la même pondération aux deux semestres.
    Mais comme tu le voies dans l'exemple que j'ai reproduit, la pondération du semestre 1 est de (1/8) 8 tandis que la pondération du semestre 2 est de (1/7).

    Donc quand tu fais : (semestre 1 + semestre 2) / 2 = (10,5625 + 10,255714) / 2 = 10,4241
    (la valeur exacte est : (84,50/8 + 72/7)/2 = (591.50 + 576) / 112 = 1167.50 / 112 = 10,4241)
    C'est comme si tu faisais : 84,50 * (1/16) + 72,00 * (1/14) = 10,4241.

    En procédant ainsi, tu changes la pondération des notes durant l'année scolaire.
    Autrement dit, tu donnes plus d'importance au seconde semestre qu'au premier, car le second semestre possède moins de notes que le premier.
    Ton calcul serait exacte si tu avais le même nombre de notes. Or ce n'est pas le cas.

    Comme je l'ai dit, il y a une erreur de raisonnement et non une erreur de calcul. La moyenne annuelle est bien 10,433 et non 10,4235 !
    En conclusion, tu ne peux pas faire (semestre1 + semestre 2) / 2 = annuelle.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  12. #32
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    effectivement je pense que j'ai pris un coup de fatigue ! je vais faire table RAZ et revoir tout ça depuis le début.
    Merci à tous.

  13. #33
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    tu y aurais lu (avec l'exemple sur les marques de voiture table BRANDS) que dans ma proposition la moyenne annuelle (dans ton cas) ne correspondait pas à la moyenne des moyennes par semestre
    J'avoue que n'arrive pas suivre !

    Citation Envoyé par SergioMaster Voir le message
    et tu aurais aussi pu y voir comment gérer le nombre de décimale via le CAST
    il y a très peu de modification à faire voyons voir si tu vas t'en sortir sans que je donne la solution
    La j'avais deja mis le CAST c'est après que j'ai posé ma question.

    Artemus24
    Comme je l'ai dit, il y a une erreur de raisonnement et non une erreur de calcul.
    Je pense que ta entièrement raison.

    Merci

  14. #34
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut devalender.

    Citation Envoyé par devalender
    J'avoue que n'arrive pas suivre !
    SergioMaster, au travers de son exemple de voitures, dit exactement la même chose que dans mon message #31.

    Citation Envoyé par devalender
    La j'avais deja mis le CAST c'est après que j'ai posé ma question.
    Normalement, la présentation des notes se fait avec deux chiffres après la virgule.
    Pour le calcul, tu dois conserver trois chiffres après la virgule et faire un arrondis à deux chiffres.
    Si tu conserves deux chiffres après la virgule, l'arrondis ne fonctionnera pas et te donnera un résultat tronqué.

    Pour ce faire, tu vas utiliser la fonction "round(..., 2)".
    Si dans la présentation, les trois chiffres après la virgule te dérange, alors tu peux faire un cast pour ne conserver que les chiffres utiles après l'arrondis.
    Voici l'exemple :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    DROP   DATABASE;
    CREATE DATABASE '..\Data\Base.fdb' page_size 4096 DEFAULT CHARACTER SET ISO8859_1;
     
    create table test (
    id_note        int          not null primary key,
    num_etudiant   smallint     not null,
    nom_matiere    char(10)     not null collate fr_fr,
    an_sconote     char(10)     not null collate fr_fr,
    note_1         decimal(5,3) not null,
    note_2         decimal(5,3) not null,
    noteexam       decimal(5,3) not null,
    moymat         decimal(5,3) not null,
    semestre       char(10)     not null collate fr_fr
    );
     
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 1, 256, 'matière 01', '2008-2009', 13.00, 12.00, 12.00, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 2, 256, 'matière 02', '2008-2009',  9.00,  8.00,  8.00, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 3, 256, 'matière 03', '2008-2009', 10.00,  5.50,  5.50, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 4, 256, 'matière 04', '2008-2009', 12.00,  9.00,  9.00, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 5, 256, 'matière 05', '2008-2009',  6.25, 13.50, 13.50, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 6, 256, 'matière 06', '2008-2009',  5.25, 12.50, 12.50, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 7, 256, 'matière 07', '2008-2009',  4.00, 17.00, 17.00, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 8, 256, 'matière 08', '2008-2009', 13.00, 10.00, 10.00, 0.00, 'semestre 1');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values ( 9, 256, 'matière 09', '2008-2009', 16.50, 16.50, 16.50, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (10, 256, 'matière 10', '2008-2009', 13.00, 13.00, 13.00, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (11, 256, 'matière 11', '2008-2009',  9.00,  9.00,  9.00, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (12, 256, 'matière 12', '2008-2009', 10.00, 10.00, 10.00, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (13, 256, 'matière 13', '2008-2009', 12.00, 12.00, 12.00, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (14, 256, 'matière 14', '2008-2009',  6.25,  6.25,  6.25, 0.00, 'semestre 2');
    insert into test (id_note,num_etudiant,nom_matiere,an_sconote,note_1,note_2,noteexam,moymat,semestre) values (15, 256, 'matière 15', '2008-2009',  5.25,  5.25,  5.25, 0.00, 'semestre 2');
     
    update test set moymat = (note_1 + note_2) * 0.2 + noteexam * 0.6;
     
    select * from test;
     
         ID_NOTE NUM_ETUDIANT NOM_MATIERE AN_SCONOTE       NOTE_1       NOTE_2     NOTEEXAM       MOYMAT SEMESTRE
    ============ ============ =========== ========== ============ ============ ============ ============ ==========
               1          256 matière 01  2008-2009        13.000       12.000       12.000       12.200 semestre 1
               2          256 matière 02  2008-2009         9.000        8.000        8.000        8.200 semestre 1
               3          256 matière 03  2008-2009        10.000        5.500        5.500        6.400 semestre 1
               4          256 matière 04  2008-2009        12.000        9.000        9.000        9.600 semestre 1
               5          256 matière 05  2008-2009         6.250       13.500       13.500       12.050 semestre 1
               6          256 matière 06  2008-2009         5.250       12.500       12.500       11.050 semestre 1
               7          256 matière 07  2008-2009         4.000       17.000       17.000       14.400 semestre 1
               8          256 matière 08  2008-2009        13.000       10.000       10.000       10.600 semestre 1
               9          256 matière 09  2008-2009        16.500       16.500       16.500       16.500 semestre 2
              10          256 matière 10  2008-2009        13.000       13.000       13.000       13.000 semestre 2
              11          256 matière 11  2008-2009         9.000        9.000        9.000        9.000 semestre 2
              12          256 matière 12  2008-2009        10.000       10.000       10.000       10.000 semestre 2
              13          256 matière 13  2008-2009        12.000       12.000       12.000       12.000 semestre 2
              14          256 matière 14  2008-2009         6.250        6.250        6.250        6.250 semestre 2
              15          256 matière 15  2008-2009         5.250        5.250        5.250        5.250 semestre 2
     
     
    with temp as (      select an_sconote, num_etudiant, semestre    as "classement", cast(round(avg(moymat),2) as decimal(4,2)) as "moyenne" from test group by an_sconote, num_etudiant, semestre
                  union select an_sconote, num_etudiant, 'annuel'    as "classement", cast(round(avg(moymat),2) as decimal(4,2)) as "moyenne" from test group by an_sconote, num_etudiant
                  union select an_sconote, num_etudiant, nom_matiere as "classement", cast(round(avg(moymat),2) as decimal(4,2)) as "moyenne" from test group by an_sconote, num_etudiant, nom_matiere)
    select * from temp;
     
    AN_SCONOTE NUM_ETUDIANT classement      moyenne
    ========== ============ ========== ============
    2008-2009           256 annuel            10.43
    2008-2009           256 matière 01        12.20
    2008-2009           256 matière 02         8.20
    2008-2009           256 matière 03         6.40
    2008-2009           256 matière 04         9.60
    2008-2009           256 matière 05        12.05
    2008-2009           256 matière 06        11.05
    2008-2009           256 matière 07        14.40
    2008-2009           256 matière 08        10.60
    2008-2009           256 matière 09        16.50
    2008-2009           256 matière 10        13.00
    2008-2009           256 matière 11         9.00
    2008-2009           256 matière 12        10.00
    2008-2009           256 matière 13        12.00
    2008-2009           256 matière 14         6.25
    2008-2009           256 matière 15         5.25
    2008-2009           256 semestre 1        10.56
    2008-2009           256 semestre 2        10.29
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Si tu es satisfait, tu me mets des +1 partout et aussi à SergioMaster !!!

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  15. #35
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par devalender Voir le message
    La j'avais deja mis le CAST c'est après que j'ai posé ma question.
    Nulle part je n'ai vu de CAST dans tes propositions (rares) de SQL

    Citation Envoyé par artemus74
    il y a une erreur de raisonnement et non une erreur de calcul.
    oui, en partie, tout dépend de ce que l'on veut vraiment
    -moyennes annuelles
    ou
    -Moyenne des semestres pour l'année (ce que j'intitulais une Moyenne des moyennes)

    il est évident que l'on n'obtiendra pas la même chose selon la "population" des notes durant les semestres
    exemple
    ANNEE SEMESTRE NOTE
    1 S1 10
    1 S1 10
    1 S1 10
    1 S1 10
    1 S1 10
    ---------------------- MOYENNE S1 : 10
    1 S2 20
    ---------------------- MOYENNE S2 : 20

    MOYENNE 1 11,66666 MOYENNE S1+S2/2 15

    pour avoir une moyenne des semestres pour l'année (tel que fait manuellement) ceci, non testé, devrait faire l'affaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH S AS  (SELECT num_etudiant,An_sconote,SEMESTRE, AVG((note1+note2)/2 * 0.4 + (noteexam * 0.6)) AS MOYENNE FROM T_NOTES GROUP BY 1,2,3),
             A AS (SELECT num_etudiant, an_sconote, AVG(MOYENNE) AS MOYENNE FROM S GROUP BY 1,2)
     
     
    SELECT NUM_ETUDIANT,0,SEMESTRE,MOYENNE FROM S
    UNION
    SELECT NUM_ETUDIANT,1,AN_SCONOTE,MOYENNE FROM A
    Citation Envoyé par artemus74
    tu me mets des +1 partout et aussi à SergioMaster !!!
    moi je n'en ai plus besoin les régles ont changées et du coup j'ai mes 6 étoiles il y a quelques jour il me fallait encore plus de 10000 points
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #36
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut SergioMaster.

    Tout à fait d'accord sur le calcul des moyennes.
    C'est un concept fort simple, mais souvent mal compris.

    Le plus simple reste la solution que j'ai présenté.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  17. #37
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 679
    Points : 954
    Points
    954
    Par défaut
    Merci a tous
    je pense avoir bien compris.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [AC-2013] Requete pour calculer une Moyenne mobile exponentielle (qui depend du recordset precedent.)
    Par lukebalthazar dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/06/2014, 00h31
  2. Réponses: 14
    Dernier message: 06/05/2008, 15h16
  3. Calculer une moyenne avec des jours absents
    Par guidav dans le forum Langage SQL
    Réponses: 7
    Dernier message: 25/01/2008, 09h35
  4. Calculer une moyenne avec une matrice
    Par progfou dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 05/06/2006, 16h47
  5. calculer une moyenne avec une requete externe
    Par allowen dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2005, 16h02

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