Добавление результатов множественного выбора SQL? - PullRequest
1 голос
/ 05 октября 2010

У меня есть три 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

Что мне нужно, так это сумма всех трех значений.sum(field_one)+sum(field_two)+sum(field_three).Есть ли способ сделать это в одном утверждении?

Ответы [ 3 ]

8 голосов
/ 05 октября 2010

Вы можете UNION ALL их.
Не использовать UNION, так как в нем пропускаются повторяющиеся значения (5+5+5 приведет к 5).

Select Sum(s)
From
(
  Select Sum(field_one) As s ...
  Union All
  Select Sum(field_two) ...
  Union All
  Select Sum(field_three) ...
) x
4 голосов
/ 05 октября 2010

Вы можете сделать это без использования Union, как это

Пример запроса

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

Ваш запрос

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) 
)
3 голосов
/ 05 октября 2010

Вы можете использовать UNION и подвыбор для этого:

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;

Редактировать: Обновлен мой ответ для использования UNION ALL, как предложил Питер Лэнг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...