2014-07-20 2 views
0

J'ai une déclaration MySQL:MySQL requête unique possible?

SELECT name, ((AVG (q1) + AVG(q2) + AVG(q3)/3) AS Average 
FROM tresults GROUP BY name ORDER BY name; 

J'ai aussi une autre statment MySQL:

SELECT name, ((AVG (q1) + AVG(q2) + AVG(q3)/3) AS Average 
FROM tresults WHERE q35 = 1 GROUP BY name ORDER BY name; 

J'ai essayé d'utiliser les sous-requêtes, mais comme il retourne plus d'une ligne le code suivant ne fonctionne pas :

SELECT name, ((AVG (q1) + AVG(q2) + AVG(q3)/3) AS Average, 
    (SELECT ((AVG (q1) + AVG(q2) + AVG(q3)/3) 
    FROM tresults WHERE q35 = 1 GROUP BY name ORDER BY name) AS Average2 
FROM tresults GROUP BY name ORDER BY name; 

Est-ce possible et à quoi ressemblerait la structure de l'instruction?

Merci d'avance pour tous les commentaires et avis.

+0

Yoo pourrait utiliser UNION ALL entre les 2 requêtes. – Mihai

Répondre

1
SELECT name, 
     (AVG (AVG (q1) + AVG(q2) + AVG(q3)/3) AS Average, 
     (AVG (AVG (case when q35 = 1 then q1 else 0 end) + 
      (AVG (case when q35 = 1 then q2 else 0 end) + 
      (AVG (case when q35 = 1 then q3 else 0 end)/3) AS q35_Average 
FROM tresults 
GROUP BY name 
ORDER BY name 
0

Parce que vous êtes le calcul de la moyenne des moyennes, il pourrait être plus rapide d'utiliser sum au lieu d'utiliser la fonction avg

select name, 
    sum(q1+q2+q3)/sum(3) as average 
    sum(case when q35 = 1 then (q1+q2+q3) else 0 end) 
    /sum(case when q35 = 1 then 3 else 0 end) as q35_average 
from tresults 
group by name 
order by name 
Questions connexes