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 :

Requête de groupage


Sujet :

SQL Firebird

  1. #1
    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 Requête de groupage
    Bonjour a tous

    voici un apercu des tables de mon analyse :

    Adherents(idadherents)
    projet (idprojet)
    cotisation (idcotisation, idadherent, idprojet ,montantpaye)

    ma requête est la suivante :

    je voudrais pour tous les adherents le montant total des cotisations payées
    jusqu'a un numero(idprojet) donné.

    exemple du projet idprojet = 1 au idprojet = 3 on aura

    idadherents --------TotalMontantPaye

    1-------------------2000
    2-------------------3000
    etc....

    Etant entendu que certains ne sont pas a jour de leur cotisation !

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT AD.idAdherent, SUM(CO.montantpaye) AS TotalMontantPaye
    FROM Adherents AD
    INNER JOIN Cotisations CO ON CO.idAdherent=AD.idAdherent
    WHERE CO.idProjet BETWEEN 1 AND 3
    GROUP BY AD.idAdherent
    Sans garantie pour Firebird
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  3. #3
    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
    ça devrait passer sous Firebird je teste et je vous fais signe
    Merci d'avance

  4. #4
    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
    Je viens juste de tester mais j'ai comme l'impression certaine personne ont été omise !.
    en effet le total adhérents est de 600, moi je me retrouve avec un nombre de 511
    j'ai comme l'impression que ce qui n'ont rien payé ont été omis ?

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Et avec un LEFT JOIN ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT AD.idAdherent, SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    FROM Adherents AD
    LEFT JOIN Cotisations CO ON CO.idAdherent=AD.idAdherent
    WHERE CO.idProjet BETWEEN 1 AND 3
    GROUP BY AD.idAdherent
    @+ Claudius

  6. #6
    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
    Non ça ne marche pas !
    Dans le forum sql j'ai eu la reponse suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT
        AD.idAdherent,
        SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    FROM
        Adherents AD
        LEFT OUTER JOIN Cotisations CO
          ON CO.idAdherent = AD.idAdherent
         AND CO.idProjet BETWEEN 1 AND 3
    GROUP BY
        AD.idAdherent;
    ça marche mais j'ai des inquiétudes dont :

    1 quel est le role de cette ligne:
    SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    et surtout de la fonction COALESCE(CO.montantpaye, 0)?

    2 ceux dont les montants sont a 0 sont bien ceux qui n'ont rien cotisé ?

    Merci

  7. #7
    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
    Après une recherche sur le net je viens de voir le role de la fonction coalesce ici http://firebirdsql.org/manual/fr/nul...ith-nulls.html
    Reste maintenant a savoir si ceux dont les montants sont a 0 sont bien ceux qui n'ont rien cotisé ?

    Merci

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par devalender Voir le message
    quel est le role de cette ligne:
    SUM(COALESCE(CO.montantpaye, 0)) AS TotalMontantPaye
    et surtout de la fonction COALESCE(CO.montantpaye, 0)?
    COALESCE transforme les valeurs NULL (en raison du LEFT OUTER JOIN) en 0.

    Citation Envoyé par devalender Voir le message
    ceux dont les montants sont a 0 sont bien ceux qui n'ont rien cotisé ?
    C'est ça.

    @+

  9. #9
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 192
    Points : 28 075
    Points
    28 075
    Par défaut
    Prennons depuis le début

    LEFT OUTER JOIN (contrairement à INNER JOIN), peut te renvoyer des enregistrement de la table Adherents qui n'ont aucune correspondance dans la table cotisation (dans le cas de INNER JOIN, seuls les enregistrements de Adhérents ayant une correspondance dans Cotisation étaient renvoyés d'où ton manque).
    Dans le cas d'un enregistrement sans correspondance, le champ MontantPaye, venant de la table Cotisation, ne sera pas renseigné, il n'aura aucune valeur, il sera à NULL. Dans ce cas te ne peut pas faire un SUM dessus.

    Donc la fonction COALESCE permet de remplacer cette "valeur NULL" par 0 lorsque elle apparait pour que tu puisse quand même faire le SUM.

    Donc les Adhérents qui ont un montant à 0 ont soit payé 0 de cotisation, soit n'ont pas encore payés
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  10. #10
    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
    là je pense que c'est très claire
    Merci a tous

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/09/2009, 17h14
  2. requête de groupage
    Par devalender dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/08/2009, 20h46
  3. Requête de groupage
    Par devalender dans le forum SQL
    Réponses: 4
    Dernier message: 11/01/2009, 13h20
  4. [MSDE] Problème de groupage sur une requête
    Par joefou dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/11/2006, 09h43
  5. requête de groupage
    Par devalender dans le forum SQL
    Réponses: 5
    Dernier message: 16/05/2006, 14h50

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