Partage
  • Partager sur Facebook
  • Partager sur Twitter

SELECT COUNT

sur plusieurs champs...

Sujet résolu
    24 mai 2011 à 18:37:49

    De retour avec mes requêtes tirées par les cheveux (cf : ici), j'ai encore une question que je ne saurai résoudre sans votre aide :

    Voici mes tables symbolisées comme suit :

    table1 :

    table1
    id
    nom
    ...
    1
    A
    ...
    2
    B
    ...
    3
    C
    ...
    4
    D
    ...
    5
    E
    ...
    6
    F
    ...
    7
    G
    ...
    ...
    ...
    ...


    et table2 qui se remplie avec des éléments de la table table1

    Exemple :

    table2
    id
    id_table1
    actif
    ...
    1
    3
    true
    ...
    2
    1
    false
    ...
    3
    4
    true
    ...
    4
    1
    true
    ...
    5
    4
    true
    ...
    6
    4
    true
    ...
    ...
    ...
    ...
    ...



    Ma Demande est la suivante :
    Je voudrais afficher le nombre d'éléments "actifs"
    dans mon exemple :
    C : 1 fois
    D : 3 fois
    A : 1 fois


    Y'a t il possibilité de faire ça en une seule requête ? sachant que je connais pas le nombre d'éléments dans la table table1...

    Merci beaucoup
    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2011 à 18:39:27

      je dirais un count sur le group by d'une jointure...
      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2011 à 18:41:04

        Je te crois sur paroles, mais je n'ai pas ce niveau en SQL ^^
        Peut-être une aide supplémentaire ??

        Merci beaucoup !
        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2011 à 18:44:16

          http://sqlpro.developpez.com/cours/sqlaz/ensembles/

          regarde ce cours,
          sur l'exemple 1 bis on te donne un exemple d'un group by sur une requete simple. Ca fait exactement ce que tu recherche, sauf qu'appliqué sur ta table 2, ca te donnerait les id de la table 1.
          Du coup si tu fait une jointure aussi dans ta requete, tu pourra récuperer la valeur dans ta table 1.
          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2011 à 18:52:02

            SELECT COUNT(*) AS nombre, nom
            FROM table2
            INNER JOIN table1
            ON (table2.id_table1 = table1.id)
            WHERE table2.actif = true
            GROUP BY table2.id_table1
            


            ça devrait le faire ! je vais essayer !
            :)
            • Partager sur Facebook
            • Partager sur Twitter
              24 mai 2011 à 18:55:00

              oui je pense aussi que ca devrait passer^^
              Sinon ca me dépasse :p
              (en sql j'ai un niveau correct en théorie, je sais qu'est ce qu'il faut utiliser etc... mais pas niveau pratique^^ sinon je t'aurais sorti la requete a mon premier post :p)
              • Partager sur Facebook
              • Partager sur Twitter
                24 mai 2011 à 19:00:32

                Enfait ! >_<

                J'ai oublié un truc ! le bougre....

                Ma table table2 à un champs en plus !
                quantité :

                table2
                id
                id_table1
                quantite
                actif
                ...
                1
                3
                50
                true
                ...
                2
                1
                30
                false
                ...
                3
                4
                45
                true
                ...
                4
                1
                28
                true
                ...
                5
                4
                47
                true
                ...
                6
                4
                16
                true
                ...
                ...
                ...
                ...
                ...
                ...


                Du coup je veux afficher ça
                C : 50 fois
                D : 108 fois
                A : 28 fois

                ça complique la chose !
                Désolé de l'oublie !
                • Partager sur Facebook
                • Partager sur Twitter
                  24 mai 2011 à 19:01:55

                  C'est a dire? tu veux la somme des quantités en plus?
                  SUM(quantite) en plus dans ton select devrait suffire nan?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 mai 2011 à 19:02:42

                    désolé, l'éditeur à foiré, j'ai édité ...

                    SELECT SUM(quantite) AS nombre, nom
                    FROM table2
                    INNER JOIN table1
                    ON (table2.id_table1 = table1.id)
                    WHERE table2.actif = true
                    GROUP BY table2.id_table1
                    

                    ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      24 mai 2011 à 19:06:02

                      Oui, ca doit être ca.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 mai 2011 à 19:07:18

                        super ! je peux pas tester, je suis pas chez moi, je prépare le terrain pour ce soir ^^

                        je te tiens au courant si ça marche ! :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          24 mai 2011 à 19:10:46

                          ya pas de soucis :)
                          Si ca peut t'interesser il y a aussi HAVING, qui pourra t'être utile. Ca permet de faire des conditions sur les groupes qui ont été créés par GROUP BY. Par exemple:

                          SELECT SUM(quantite) AS nombre, nom
                          FROM table2
                          INNER JOIN table1
                          ON (table2.id_table1 = table1.id)
                          WHERE table2.actif = true
                          GROUP BY table2.id_table1
                          HAVING SUM(quantite) > 30

                          ne te retournera que
                          C : 50 fois
                          D : 108 fois

                          Ca peut être utile...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 mai 2011 à 20:34:54

                            ah ouais ! c'est génial !

                            Il faudrait que je me mette sérieusement au SQL :)


                            EDIT :

                            Bon ben ça y est ! j'ai testé, ça marche niquel :)
                            Merci beaucoup !
                            • Partager sur Facebook
                            • Partager sur Twitter

                            SELECT COUNT

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown