2010-09-02 1 views
0

Comment puis-je additionner des SUM de différentes sous-requêtes dans MySQL?Comment ajouter plusieurs SUM de différentes sous-requêtes dans un résultat?

JOIN ( SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes, customer_id FROM product1_quote GROUP BY customer_id ) p1q ON (p1q.customer_id = c.customer_id)

JOIN ( SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes, customer_id FROM product2_quote GROUP BY customer_id ) p1q ON (p1q.customer_id = c.customer_id)

donc je veux ajouter ces deux et ont numQuotes être le numQuotes au total. Cependant, c'est un peu plus compliqué que ça, parce que le nombre de tables différentes est dynamique, donc dans n'importe quelle circonstance il pourrait y avoir un nombre quelconque de sous-requêtes.

Répondre

0

Je l'ai résolu en changeant les JOINs en LEFT JOINs et en utilisant IFNULL(numQuotes".$k.",0)+ dans la boucle PHP qui met les requêtes ensemble, où $k est un index.

Ainsi, le résultat final est quelque chose comme:

SELECT IFNULL(numQuotes0,0)+IFNULL(numQuotes1,0) AS totalQuotes FROM ...

LEFT JOIN (SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes0, customer_id FROM product1_quote GROUP BY customer_id) p1q ON (p1q.customer_id = c.customer_id) LEFT JOIN (SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes1, customer_id FROM product2_quote GROUP BY customer_id) p2q ON (p2q.customer_id = c.customer_id)

La gauche JOIN NULL si aucun retour de résultats, d'où la nécessité de IFNULL.

1

Qu'est-ce qui vient avec ce qui suit?

select sum(numQuotes), customer_id from 
(
    (SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes, customer_id FROM 
    product1_quote GROUP BY customer_id) p1q ON (p1q.customer_id = c.customer_id) 
UNION 
    (SELECT SUM(IF(isPurchased='0', 1, 0)) AS numQuotes, customer_id FROM 
    product2_quote GROUP BY customer_id) p1q ON (p1q.customer_id = c.customer_id) 
) group by customer_id; 

Les parenthèses peuvent être désactivées, vérifiez-les d'abord.

Questions connexes