У меня есть следующие 2 недельных таблицы MYSQL:

ТаблицаA_Wk1

Id | Price
----------
1  | 1
1  | 2
2  | 5

ТаблицаA_Wk2

Id | Price
----------
1  | 2
4  | 2

Я могу сгруппировать цену в одну таблицу:

SELECT Id, SUM(Price) FROM TableA_Wk1
GROUP BY Id

И получить

Id | Price
----------
1  | 3
2  | 5

Я хотел бы также рассмотреть таблицу TableA_Wk2, чтобы получить следующее:

Id | Price
----------
1  | 5
2  | 5
4  | 2

Если я использую UNION ALL, результат будет разделен:

SELECT Id, SUM(Price) FROM TableA_Wk1
  GROUP BY Id
UNION ALL
SELECT Id, SUM(Price) FROM TableA_Wk2
  GROUP BY Id
0
Steven Yong 6 Сен 2016 в 10:18

3 ответа

Лучший ответ

Сначала получите все кортежи <Id,price> из этих двух таблиц. Затем используйте SUM и GROUP BY Id в результирующей таблице.

SELECT 
t.Id,
SUM(t.price) 
FROM 
(
 SELECT Id, Price FROM TableA_Wk1
 UNION ALL
 SELECT Id, Price FROM TableA_Wk2
) AS t
GROUP BY t.Id

Примечание

UNION удаляет дубликаты.

Сначала получите все кортежи UNION ALL из этих двух таблиц. Затем используйте {{X1}} и {{X2}} в результирующей таблице.…

1
1000111 6 Сен 2016 в 07:22

Сначала UNION, затем GROUP BY:

SELECT t.id,sum(t.price) as price
FROM (
      SELECT id,price from TableA_Wk1
      UNION ALL
      SELECT id,price from TableA_Wk2
     ) t
GROUP BY t.id
1
sagi 6 Сен 2016 в 07:23

Что мне не хватает ...…

select sum(price) from (
   select price from TableA_Wk1
   union all  
   select price from TableA_Wk1
) as alais
1
Danyal Sandeelo 6 Сен 2016 в 07:35