对mySQL中两个表的总和进行排序

时间:2009-11-23 15:58:54

标签: sql mysql

我无法弄清楚将在表之间添加和比较的查询。我有三张桌子:

房子

id
-----
 1
 2

id | house_id | btus
---------------------
 3 |   1      | 100
 4 |   2      | 200

id | month_id |  btu
--------------------------
 5 |   3      |  10
 6 |   4      |  20
 7 |   3      |  15  

我需要一个查询,它将返回按月和汽车的总btus排序的房屋ID。

因此对于上面的例子,它将返回2,1作为(200 + 20)> (100 + 10 + 15)

2 个答案:

答案 0 :(得分:3)

SELECT  h.*
FROM    house
ORDER BY
        (
        SELECT  SUM(c.btu)
        FROM    month m
        JOIN    cars c
        ON      c.month_id = m.id
        WHERE   m.house_id = h.id
        ) +
        (
        SELECT  SUM(m.btus)
        FROM    month m
        WHERE   m.house_id = h.id
        )
        DESC

,或者这个(可能稍微更高效):

SELECT  h.*
FROM    house
ORDER BY
        (
        SELECT  SUM
                (
                btus +
                (
                SELECT  SUM(btu)
                FROM    cars c
                WHERE   c.month_id = m.id
                )
                )
        FROM    month m
        WHERE   m.house_id = h.id
        )
        DESC

答案 1 :(得分:0)

可能不是最有效的联接使用,但是:

  SELECT house.id 
    FROM house JOIN month JOIN car
   WHERE house.id = month.house_id AND month.id = car.month_id
GROUP BY house.id
ORDER BY sum(car.btu) + sum(month.btus);

joins和where子句将使表格爆炸(使用SELECT *并跳过组/顺序子句),group by将它们分别展平为一行,sum()s将执行相关的数学运算。< / p>