SQL - 按共享字段的多个表的顺序排序

时间:2017-07-20 15:18:41

标签: mysql join sql-order-by union

我有两个不同的表共享相同的列名。表格列出了由'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

3 个答案:

答案 0 :(得分:1)

你很亲密。你需要:

  1. 一个UNION ALL,而不是两个。

  2. 一个GROUP BY,它给出了break字段。

  3. 子查询的别名(我使用了AllRevenue - 您可以使用任何有效名称。)

  4.     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