带有相关子查询的SQL Sum()

时间:2011-09-08 19:27:47

标签: sql correlated-subquery

我有两张桌子:基金和物品。 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中都有一个相关的子查询,我收到了错误。

如果有人能指出我正确的方向,我会很感激。

4 个答案:

答案 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可能更适合分组