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 :

cumul dans une requête


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 77
    Points : 40
    Points
    40
    Par défaut cumul dans une requête
    bonjour,

    J'aimerai avoir une proposition de formulation d'une requête SQL pour le cas où on veut calculer le nombre des inscrits atteints dans chaque école et pour chaque année ex:

    Ecole1:
    2010 2009 2008
    ======================
    10 20 33

    (de telle sorte à ce qu'on fait le cumul du nombre des inscrits par année => par exemple le nombre atteint dans l'année 2010 égal celui des années précédentes + celui de 2010).

    Voila la struture des tables:

    Ecole (id,nom,ville...)
    Inscrits(id,nom,prenom,date_naissance,sexe...)
    inscrits_ecole(id_inscrit,id_ecole,date_inscription)


    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Qu'avez-vous essayé ?

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    J'ai testé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select year(date_inscription) as annee,
           (select count(id_inscrit)
              from inscrits_ecole t
             where year(t.date_inscription) < year(ie.date_inscription)) as nbr_inscrits
      from inscrits_ecole ie
    Il me manque le group by 'Année' et le nom de l'école, sachant que si je mets le group by dans la sous-requête un message d'erreur s'affiche me disant que la requête retourne plus d'une valeur !

    Merci pour votre réponse.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Il y a de l'idée mais vous avez oubliez la jointure sur le même id_ecole, c'est ce qui engendre le message d'erreur.

    De manière générale, préférez les jointures aux requêtes scalaires, c'est très souvent plus performant.

    Essayez ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      SELECT ec.nom,
             year(i1.date_inscription) AS annee,
             count(*)
        FROM Ecole as ec
             inner join inscrits_ecole as i1
               on i1.id_ecole = ec.id_ecole
             inner join inscrits_ecole as i2
               on i2.id_ecole          = i1.id_ecole
              and i2.date_inscription <= i1.date_inscription
    GROUP BY ec.nom,
             year(i1.date_inscription)

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    77
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 77
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup pour votre réponse, en effet quelle est la différence entre INNER JOIN et le WHERE ?

    J'ai vraiment besoin de ce genre de requête, même dans celle de ce sujet il me manque d'autres colonnes à ajouter en relation avec d'autres tables.

    Merci encore une fois.

Discussions similaires

  1. [AC-2003] Cumul dans une requête
    Par C15nantes dans le forum VBA Access
    Réponses: 1
    Dernier message: 20/03/2015, 17h46
  2. Cumul d'un champ dans une requête
    Par RANTO dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 21/05/2008, 14h37
  3. Somme cumulée dans une requête
    Par vthomas dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/02/2008, 18h18
  4. Problème de cumul dans une requête SQL
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 13/09/2007, 05h56
  5. [Débutant] Cumul dans une requête
    Par waiwai dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/06/2007, 10h19

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