我有两个不同的表共享相同的列名。表格列出了由'id'标识的相同产品。产品在两个表中都有不同的收入,并在每个表中多次列出。
我想将两个表中相同产品的收入和ORDER BY总和相加。结果是首先对收入最高的产品进行排序。
我尝试过JOIN和UNION,但似乎无法找到正确的解决方案。
UNION查询我试过......
SELECT id, SUM(rev) as total
FROM (
SELECT id, rev FROM table1 UNION ALL
SELECT id, rev FROM table2 UNION ALL
)
ORDER BY total DESC
JOIN查询我试过......
SELECT table1.id,
table1.rev,
table2.id,
table2.rev,
(table1.rev + table2.rev) as revenue
FROM table1
INNER JOIN table2 ON table1.id = table2.id
ORDER BY revenue DESC
答案 0 :(得分:1)
你很亲密。你需要:
一个UNION ALL,而不是两个。
一个GROUP BY,它给出了break字段。
子查询的别名(我使用了AllRevenue - 您可以使用任何有效名称。)
SELECT id, SUM(rev) as total FROM ( SELECT id, rev FROM table1 UNION ALL SELECT id, rev FROM table2 ) AS AllRevenue GROUP BY id ORDER BY total DESC
如果你使用了FULL OUTER JOIN,那么join方法会起作用,因为有些id可能出现在一个表中而不是另一个表中,但这通常不太适合。
答案 1 :(得分:0)
看起来你只需要对ID进行分组然后......除非我遗漏了什么。
select d.* from (
SELECT
table1.id,
Sum(table1.rev) + Sum(table2.rev) as revenue
FROM table1
INNER JOIN table2 ON table1.id = table2.id
GROUP BY
table1.id) d
order by d.revenue
答案 2 :(得分:0)
SELECT id, SUM(rev) as total
FROM (
SELECT id, rev FROM table1 UNION ALL
SELECT id, rev FROM table2
)
GROUP BY id
ORDER BY total DESC