Partage
  • Partager sur Facebook
  • Partager sur Twitter

Select SUM sur Disctinct

Sujet résolu
    28 novembre 2011 à 16:09:06

    Bonjour à tous !
    Quand ça devient un peu complexe en SQL, je n'y arrive plus

    voici ma table : prestations :
    id designation duree
    1 formatage 5
    2 depoussierage 6
    3 depoussierage 4
    4 formatage 12
    ... ... ...


    J'aimerai simplement afficher la somme des heures PAR désignation et les désignations bien sur:

    Dans mon exemple, je voudrais :

    Citation : Exemple

    Formatage : 17
    depoussierage : 10



    Mon code SQL me retourne rien de concluant !

    SELECT  DISTINCT designation, sum(duree) AS heures FROM prestations
    


    Pouvez-vous m'aider ?

    Merci !
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2011 à 16:11:44

      et avec un group by designation à la fin de ta requête ?
      • Partager sur Facebook
      • Partager sur Twitter
      Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
        28 novembre 2011 à 16:16:33

        Nan, déjà comme ça il m'affiche qu'une ligne... le groupe by ne change rien
        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2011 à 16:20:34

          Et en virant le distinct mais en laissant le group by ?
          • Partager sur Facebook
          • Partager sur Twitter
          Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
            28 novembre 2011 à 16:24:35

            ben ça ne donnera pas cque je veux ! j'aurai plusieurs fois les même designations
            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2011 à 16:27:11

              Si tu fais ça :
              SELECT  designation, sum(duree) AS heures FROM prestations group by designation
              

              Ca te donne quoi ?
              • Partager sur Facebook
              • Partager sur Twitter
              Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
                28 novembre 2011 à 16:32:05

                une seule ligne...


                Bon faut savoir que j'ai aussi une consigne sur le mois en cours !

                SELECT  designation, sum(duree) AS heures FROM prestations
                					INNER JOIN cloture 
                		ON (cloture.id_intervention = prestations.id_intervention)
                		WHERE cloture.date>'".$debut_mois."'
                		AND cloture.date<'".$fin_mois." group by designation
                
                • Partager sur Facebook
                • Partager sur Twitter
                  28 novembre 2011 à 16:35:42

                  Et tu as des données pour les autres désignations pour le mois en cours ??
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
                    28 novembre 2011 à 16:47:25

                    Enfait, j'ai trouvé tout seul !
                    Merci quand même !

                    SELECT DISTINCT designation AS desi, 
                    			(SELECT SUM(duree) AS heure  FROM prestation_effectuee 
                    			INNER JOIN cloture 
                    			ON (cloture.id_intervention = prestations.id_intervention)
                    			WHERE cloture.date>'".$debut_mois."'
                    			AND cloture.date<'".$fin_mois."' AND designation = desi) AS heures FROM prestations
                    	INNER JOIN cloture 
                    	ON (cloture.id_intervention = prestations.id_intervention)
                    	WHERE cloture.date>'".$debut_mois."'
                    	AND cloture.date<'".$fin_mois."'
                    
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 novembre 2011 à 17:03:15

                      Oui mais non, on ne fait pas ça.

                      Comme tu ne nous donnes pas assez d'informations pour répondre correctement à ton problème, je vais répondre uniquement à la question de ton premier post :
                      SELECT designation, SUM(duree) AS heure
                      FROM prestation_effectuee
                      GROUP BY designation;
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        28 novembre 2011 à 22:05:56

                        ben toutes les infos sont là !
                        Le truc de date ça je peux le rajouter après ça change rien !
                        Et rencoco à donné exactement le même code que toi et ça n'a pas fonctionné ! j'ai cherché tout seul, et j'ai trouvé et ça fonctionne très bien !
                        Le Group By ne me donne pas l'effet attendu.

                        Bonne soirée ! et merci.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          28 novembre 2011 à 23:20:42

                          Oh, surprise, ça donne exactement ce que tu cherches :
                          fayden=> SELECT * FROM prestations;
                           id |  designation  | duree 
                          ----+---------------+-------
                            1 | formatage     |     5
                            2 | depoussierage |     6
                            3 | depoussierage |     4
                            4 | formatage     |    12
                          (4 lignes)
                          
                          fayden=> SELECT designation, SUM(duree) AS heures
                          FROM prestations
                          GROUP BY designation;
                            designation  | heures 
                          ---------------+--------
                           formatage     |     17
                           depoussierage |     10
                          (2 lignes)


                          Si tu te satisfais de solutions minables, c'est ton problème. En attendant, tu peux toujours faire des efforts. Tu ne donnes visiblement pas le vrai problème, une erreur récurrente chez les débutants, qui pensent aider en donnant une partie du problème alors qu'il ne reflète pas du tout le vrai problème. Pire : tu t'entêtes à utiliser une mauvaise solution malgré des recommandations contraires, c'est une attitude qui est particulièrement déplaisante.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 novembre 2011 à 9:34:04

                            ok, j'accepte mon erreur.

                            N'empeche que le fait de rajouter la condition sur la date, je m'en sort tout seul.

                            Voici la requete que j'obtient en me servant de la tienne:

                            SELECT designation AS desi, SUM(duree) AS heures
                            	FROM prestation_effectuee
                            	INNER JOIN cloture 
                            		ON (cloture.id_intervention = prestation_effectuee.id_intervention)
                            	WHERE cloture.date BETWEEN '".$debut_mois."' AND '".$fin_mois."'
                            	GROUP BY designation
                            


                            Ce qui marche parfaitement, contrairement à avant (et je ne l'explique pas) ! d'où mon obstination.

                            Merci de ton aide.

                            Ps : je ne suis pas un débutant, je simplifie les choses en enlevant ce que je sais faire pour vous faciliter le travail.
                            Bref, sujet résolu, n'en parlons plus.

                            re PS : une dernière question, si je n'abuse pas de ta patience :
                            J'ai maintenant, une requête optimisée qui fonctionne, estt-il possible de trier le résultat par somme durée ? pour justement avoir les prestations les plus utilisées en premier ?

                            Merci !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 novembre 2011 à 11:00:12

                              Le fait de ne pas nous donner la requête complète faisait qu'on ne pouvait te donner la solution exacte à ton problème.

                              Pour ton ps :
                              select desi, heures
                              from (
                              SELECT designation AS desi, SUM(duree) AS heures
                              	FROM prestation_effectuee
                              	INNER JOIN cloture 
                              		ON (cloture.id_intervention = prestation_effectuee.id_intervention)
                              	WHERE cloture.date BETWEEN '".$debut_mois."' AND '".$fin_mois."'
                              	GROUP BY designation) A
                              order by heures
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?

                              Select SUM sur Disctinct

                              × 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