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

具有相关子查询的SQL Sum(),sql,correlated-subquery,Sql,Correlated Subquery,我有两张表:基金和项目。Items有一个名为fundID的字段,该字段与基金表的ID相关。Items还有一个price字段 下面是两个表的简化示例: 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

我有两张表:基金和项目。Items有一个名为fundID的字段,该字段与基金表的ID相关。Items还有一个price字段

下面是两个表的简化示例:

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中使用相关子查询,但我发现了一些错误

如果有人能给我指出正确的方向,我将不胜感激。

试试这个:

SELECT f.fundname,
       SUM(i.price)
FROM   fund f
       JOIN items i
         ON i.fundid = f.id
GROUP  BY f.fundname  
试试这个:

SELECT f.fundname,
       SUM(i.price)
FROM   fund f
       JOIN items i
         ON i.fundid = f.id
GROUP  BY f.fundname  
试试这个

select fundName,sum(price) as  TotPrice
from Funds f
join Items g on g.id=f.id
group by f.fundName
试试这个

select fundName,sum(price) as  TotPrice
from Funds f
join Items g on g.id=f.id
group by f.fundName
如果你有很多基金,按基金Id分组可能更好


如果你有很多基金,基金Id按分组可能更好。考虑到你的表结构,没有很好的理由这样做。然而,这个问题确实询问了一个子查询,表结构被简化了

因此,这将给出与直接连接/分组相同的结果

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 

注意,如果您想要0表示没有项目的基金,则存在合并/左联接

考虑到您的表结构,没有很好的理由这样做,但是问题确实涉及子查询,表结构被简化了

因此,这将给出与直接连接/分组相同的结果

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 

注意,如果您想要0表示没有项目的基金,则存在合并/左联接

sql server?我的sql?神谕版本它总是有帮助的:-实际上SharePoint 2010列表带有Access前端。实际的SQL server是MS SQL,不确定是哪个版本。SQL server?我的sql?神谕版本它总是有帮助的:-实际上SharePoint 2010列表带有Access前端。实际的SQL server是MS SQL,不确定是哪个版本。为什么当我在代码的“选择”部分输入更多字段时,它会停止工作?例如,f.fundCode和fund.fundCode都会抛出不同的错误消息。@penco您不能添加导致group by不明确的字段。。。如果你解释一下你的表结构和代码?然后我可以引导你正确的方向。为什么当我在代码的SELECT部分输入更多字段时,它会停止工作?例如,f.fundCode和fund.fundCode都会抛出不同的错误消息。@penco您不能添加导致group by不明确的字段。。。如果你解释一下你的表结构和代码?然后我可以指引你正确的方向。