我有两张桌子:基金和物品。 Items有一个名为fundID的字段,该字段与基金表的ID相关。物品也有价格区域。
以下是两个表的简化示例:
FUND
ID fundName
1 maintenance
2 books
3 development
4 media
ITEMS
ID price fundID
1 $10 2
2 $20 4
3 $5 4
4 $8 1
5 $10 3
6 $12 4
我想创建一个查询,通过fundID字段为我提供每个基金的名称以及与该基金相关的商品的所有价格总和。我尝试了几种方法,例如在SUM()中和WHERE中都有一个相关的子查询,我收到了错误。
如果有人能指出我正确的方向,我会很感激。
答案 0 :(得分:3)
试试这个:
SELECT f.fundname,
SUM(i.price)
FROM fund f
JOIN items i
ON i.fundid = f.id
GROUP BY f.fundname
答案 1 :(得分:2)
根据您的表结构,没有充分的理由这样做,但是问题确实询问了子查询并简化了表结构。
所以这将给出与直接JOIN / GROUP BY
相同的结果SELECT f.fundname,
coalesce(i.price,0) price
FROM fund f
LEFT JOIN (SELECT fundid,
SUM(price) price
FROM items i
GROUP BY fundid) i
ON f.fundid = i.fundid
请注意COALESCE / LEFT JOIN是否存在,如果您想要0没有项目的资金。
答案 2 :(得分:0)
试试这个
select fundName,sum(price) as TotPrice
from Funds f
join Items g on g.id=f.id
group by f.fundName
答案 3 :(得分:0)
SELECT f.fundid, f.fundName, SUM(price)
FROM Fund f
INNER JOIN ITEMS i ON i.fundId = f.fundId
GROUP BY f.FUNDID
如果您有很多资金,资金ID可能更适合分组