par
Cyrano » 30 oct. 2010, 16:47
Salut,
Moi j'aurais fait comme ceci :
SELECT SUM(c1 + c2 + c3) /
(SUM(IF(c1 != 0, 1, 0) ) +
SUM(IF(c2 != 0, 1, 0) ) +
SUM(IF(c3 != 0, 1, 0) ) ) AS RESULT FROM t1
Mais j'ai peut-être pas capter

Ben non, on divise un total non pas par une somme mais par un nombre de lignes, or là, tu n'utilises que des sommes. Si tu observes, dans mes sous-requêtes, j'effectue un COUNT des lignes différentes de zéro. C'est au début que je fais la somme de ces décomptes effectués dans la sous-requête : la valeur ne sera pas la même.
En tous cas, j'ai testé en live en créant une table avec les valeurs suggérées par
Cynthia et j'ai obtenu exactement le résultat attendu.
Edit : quoique ton idée, c'est pas totalement fou à la base, il y a peut-être une meilleure solution par là effectivement, je vais regarder ça
Edit 2 : ben c'est surprenant, ta requête fonctionne et du coup est nettement meilleure que la mienne =D>
[quote="dunbar"]Salut,
Moi j'aurais fait comme ceci :
[php]
SELECT SUM(c1 + c2 + c3) /
(SUM(IF(c1 != 0, 1, 0) ) +
SUM(IF(c2 != 0, 1, 0) ) +
SUM(IF(c3 != 0, 1, 0) ) ) AS RESULT FROM t1
[/php]
Mais j'ai peut-être pas capter :)[/quote]
Ben non, on divise un total non pas par une somme mais par un nombre de lignes, or là, tu n'utilises que des sommes. Si tu observes, dans mes sous-requêtes, j'effectue un COUNT des lignes différentes de zéro. C'est au début que je fais la somme de ces décomptes effectués dans la sous-requête : la valeur ne sera pas la même.
En tous cas, j'ai testé en live en créant une table avec les valeurs suggérées par [b]Cynthia[/b] et j'ai obtenu exactement le résultat attendu.
Edit : quoique ton idée, c'est pas totalement fou à la base, il y a peut-être une meilleure solution par là effectivement, je vais regarder ça :-k
Edit 2 : ben c'est surprenant, ta requête fonctionne et du coup est nettement meilleure que la mienne =D>