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

Requêtes MySQL Discussion :

faire des sommes de colonnes de plusieurs tables


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut faire des sommes de colonnes de plusieurs tables
    Bonjour à tous, je me suis mis au sql il y a peu de temps et je bloque pour faire des sommes sur plusieurs tables (2 pour commencer)

    1ère table previsions: champs: id, idlieu, enf, ad, date
    2ème table reel: champs: id, id_lieu, NbEnf, NbAd, date_saisie

    Je cherche à faire la somme des colonnes enf, ad, NbEnf, NbAd en fonction d'une fourchette de dates.

    Pouvez vous m'aider à trouver la marche à suivre svp ?

    Dois-je utiliser une jointure INNER JOIN sur les dates ?
    ou plutôt avec un UNION ALL dans une sous-requête ?

    Tout ce que j'essaie me donne des résultats vertigineux comme si chaque ligne d'une table était recomptée pour chaque calcul d'une ligne de l'autre table.

    Je suis vraiment dans le flou..

    Je vous remercie d'avance à tous.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Quelles requêtes avez-vous essayé ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT SUM(total.enf) AS PREVENFANTS, SUM(total.es) AS PREVADULTES, SUM(total.NbEnf) AS REELENFANTS, SUM(total.NbAd) AS REELADULTES,  DATE
    FROM
    (SELECT enf, es, NbEnf, NbAd, date AS DATE, Date_Saisie AS DATE FROM previsions
    INNER JOIN reel
    ON previsions.date=reel.Date_Saisie
    WHERE DATE BETWEEN debut AND fin) AS total
    GROUP BY DATE
    Mais ça me donne des résultats gigantesques.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) 'date' est un mauvais nom de colonne car c'est un mot réservé du langage SQL.

    2) Un code indenté et aéré est plus agréable à lire et à débugguer.

    3) Pourquoi faire une sous-requête ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT p.`date`,
    	SUM(p.enf) AS PREVENFANTS,
    	SUM(p.es) AS PREVADULTES,
    	SUM(r.NbEnf) AS REELENFANTS,
    	SUM(r.NbAd) AS REELADULTES
    FROM previsions p
    INNER JOIN reel r ON r.Date_Saisie = p.`date`
    WHERE p.`date` BETWEEN :debut AND :fin
    GROUP BY p.`date`
    ORDER BY p.`date`
    Si chaque date n'apparaît qu'une seule fois dans chaque table, ça devrait donner le bon résultat.
    S'il y a des dates en double, ça va évidemment multiplier les lignes et donc agrandir les sommes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/10/2012, 15h46
  2. Récupérer la somme de colonnes de plusieurs tables
    Par romaintaz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 07/09/2009, 13h48
  3. faire une somme de colonnes ?
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/09/2006, 15h49
  4. Réponses: 2
    Dernier message: 26/04/2006, 08h53
  5. [Débutant]Comment faire des tranches de nombre dans une tabl
    Par Jedecouvreaccess dans le forum Access
    Réponses: 7
    Dernier message: 05/09/2005, 08h46

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