2010-10-05 3 views
1

J'ai trois sélections SQL, dont j'ai besoin d'additionner les résultats. Deux des trois utilisent des jointures assez complexes.Ajout des résultats de plusieurs sélections SQL?

select sum(field_one) from t_a join t_b on (t_a.bid = t_b.id) where t_b.user_id=:id 
select sum(field_two) from t_c join t_d on (t_c.did = t_d.id) where t_d.user_id=:id 
select sum(field_three) from t_e where t_e.user_id=:id 

Ce dont j'ai besoin, c'est la somme des trois valeurs. sum(field_one)+sum(field_two)+sum(field_three). Y a-t-il un moyen de le faire dans une seule déclaration?

+0

essayez d'utiliser cette select ((select 15) + (sélectionner 10) + (sélectionner 20)) logi c vérifier ma réponse ci-dessous – Thakur

Répondre

8

Vous pouvez UNION ALL eux.
N'utilisez pas UNION, car il omet les valeurs en double (5+5+5 entraînerait 5).

Select Sum(s) 
From 
(
    Select Sum(field_one) As s ... 
    Union All 
    Select Sum(field_two) ... 
    Union All 
    Select Sum(field_three) ... 
) x 
+0

+1 et une bonne réflexion sur le 'UNION ALL' –

3

Vous pouvez utiliser un UNION et un sous-sélection pour le faire:

select sum(`sum`) FROM 
(
    select sum(field_one) as `sum` from t_a join t_b on (t_a.bid = t_b.id) where t_b.user_id=:id 
    UNION ALL 
    select sum(field_two) from t_c join t_d on (t_c.did = t_d.id) where t_d.user_id=:id 
    UNION ALL 
    select sum(field_three) from t_e where t_e.user_id=:id 
) as x; 

Edit: Mise à jour ma réponse à utiliser UNION ALL, comme suggéré par Peter Lang.

4

Vous pouvez le faire sans utiliser l'Union comme celui-ci

Exemple de requête

select((select 15) + (select 10) + (select 20)) 

Votre requête

select 
(
    (select sum(field_one) from t_a join t_b on (t_a.bid = t_b.id) where t_b.user_id=:id) + 
    (select sum(field_two) from t_c join t_d on (t_c.did = t_d.id) where t_d.user_id=:id) + 
    (select sum(field_three) from t_e where t_e.user_id=:id) 
) 
+0

' + 1': Devrait fonctionner pour MySQL et SQL Server, pas Oracle cependant, mais ce n'était pas la question :) –

+0

Je ne sais pas oracle de toute façon Je ne sais pas MySQL: P Peut-être que je dois essayer de l'apprendre dans un proche avenir – Thakur

Questions connexes