2013-04-19 6 views
0

Je vais faire un calcul de notes et je m'en rends compte avec une requête MySQL. Ici toute la requête:Mysql - Pas d'ajout dans ma requête Calc

SELECT DISTINCT Round(Avg(avg = 2) * Count(avg)) AS New, 
       sma_famille.famille 
FROM (SELECT DISTINCT Round(Sum(note)/Count(note)) AS AVG, 
         sma_famille.famille, 
         sma_agents.nom 
     FROM sma_notes_conso 
       INNER JOIN sma_famille 
         ON sma_famille.id_service 
       INNER JOIN sma_agents 
         ON sma_notes_conso.id_agent = sma_agents.id_agent 
       INNER JOIN sma_service_activite 
         ON sma_service_activite.id_activite = 
          sma_notes_conso.id_activite 
       INNER JOIN sma_service 
         ON sma_service.id_service 
     WHERE sma_service.id_entites IN(20) 
       AND sma_famille.id_service IN(988, 989, 990) 
       AND sma_service_activite.id_famille = sma_famille.id_famille 
       AND sma_service_activite.id_service = sma_famille.id_service 
       AND sma_service_activite.id_service = sma_service.id_service 
       AND date_conso = '2013-04-03' 
     GROUP BY sma_famille.famille, 
        sma_agents.nom) AS FN 
     INNER JOIN sma_famille 
       ON sma_famille.id_service 
     INNER JOIN sma_service 
       ON sma_service.id_service 
WHERE sma_service.id_entites IN(20) 
     AND sma_famille.id_service IN(988, 989, 990) 
     AND sma_service.id_service = sma_famille.id_service 
     AND FN.famille = sma_famille.famille 
GROUP BY FN.famille 

La requête fonctionne correctement si je n'ai qu'un id_service comme: Voici le premier:

AND sma_famille.id_service IN(988) 

et j'obtenir ces ResultSet:

|9 |Math| 
    |13 |English| 
    |2 |Bio| 

Voici le deuxième

AND sma_famille.id_service IN(989) 

    |5 |Math| 
    |8 |English| 
    |0 |Bio| 

Si je prends les deux, il l'a multiplié par 2

AND sma_famille.id_service IN(988,989) 

et je reçois ces ResultSet:

|28 |Math| 
    |42 |English| 
    |4 |Bio| 

Mais je ne veux pas une multiplication, je veux une addition de deux « id_service comme:

|14 |Math| 
    |21 |English| 
    |2 |Bio| 

et si j'ai trois ID, qu'il l'a multiplié par 3 !!!

Everytime si j'ajoute un «id_service-il multiplié par nombre de id_service

J'ai 3 fois la même requête pour chaque note. Les Notes sont 1, 2, 3. Cet exemple est seulement pour la Note 2

Quelqu'un peut voir le problème?

THX à l'avance

+0

pouvez-vous s'il vous plaît poster vos scripts de table et expliquer plus exactement vouloir que vous voulez réaliser votre script? Sans cette information, il pourrait être difficile de trouver le problème. –

+0

Vous pouvez les télécharger sur scribd et juste poster un lien ici ... –

+0

OK, ici vous pouvez trouver le script de table: http://www.workupload.com/file/Y9xX3Bl THX – achillix

Répondre

0

Je pense avoir trouvé votre problème:

Vous n'avez pas défini l'INNER JOIN correctement. Ainsi, votre requête a fait une jointure cartésienne et a multiplié les valeurs. Le suivant devrait être correct:

SELECT DISTINCT round(avg(AVG =1) * count(AVG)) AS New, sma_famille.famille 
          FROM (... 
          ) AS FN 
          INNER JOIN sma_famille ON sma_famille.id_service = FN.id_service -- added join criteria 
          INNER JOIN sma_service ON sma_service.id_service = FN.id_service -- added join criteria 
          WHERE sma_service.id_entites IN(20) 
          AND sma_famille.id_service IN(988,989,990) 
          AND sma_service.id_service = sma_famille.id_service 
          AND FN.famille = sma_famille.famille 
          GROUP BY FN.famille; 
+0

Ici j'ajoute des données aux tables et j'ajoute un script sql pour exécuter le procedur. J'espère que ça aide à comprendre. http://www.workupload.com/file/zTeQlc0 THX THX – achillix

+0

Quelqu'un a une idée ou une solution? THX – achillix

+0

J'ai changé ma réponse. J'espère que cela aide :) –