我无法弄清楚将在表之间添加和比较的查询。我有三张桌子:
房子
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)
答案 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>