在sql中对多个表使用SUM()

在sql中对多个表使用SUM(),sql,Sql,我正在尝试编写一个查询,它将使用sum函数将一列中的所有值相加,然后除以另一个表中的元组计数。出于某种原因,当我单独运行sum查询时,我得到了正确的数字,但是当我在查询中使用它时,下面的值是错误的 这就是我想做的,但是数字出来是错的 select (sum(adonated) / count(p.pid)) as "Amount donated per Child" from tsponsors s, player p; 我发现问题出在总数上。下面返回650000,而它应该返回25000 se

我正在尝试编写一个查询,它将使用sum函数将一列中的所有值相加,然后除以另一个表中的元组计数。出于某种原因,当我单独运行sum查询时,我得到了正确的数字,但是当我在查询中使用它时,下面的值是错误的

这就是我想做的,但是数字出来是错的

select (sum(adonated) / count(p.pid)) as "Amount donated per Child"
from tsponsors s, player p;
我发现问题出在总数上。下面返回650000,而它应该返回25000

select (sum(adonated)) as "Amount donated per Child"
from tsponsors s, player p;
如果我从播放器p中移除,它将得到正确的数量。但是我需要玩家表来获得玩家的数量

我有3个与此查询相关的表。 播放器(pid,tid(fk)) 小组(工业贸易署) tsponsors(tid(fk)、adonated、sid(fk))这是一个连接表

我想要得到的是每个团队捐赠的所有金额的总和(adonated),然后除以数据库中的玩家数量(pid)

试试看

select sum(s.adonated) / (SELECT count(p.pid) FROM player p) 
 as "Amount donated per Child"
from tsponsors s;
原始查询在没有任何条件的情况下联接两个表,这会导致交叉联接

更新

SELECT ts.tid, SUM(ts.adonated),num_plyr
FROM tsponsors ts 
INNER JOIN 
 (
   SELECT tid, COUNT(pid) as num_plyr
   FROM player
   GROUP BY tid
)a ON (a.tid = ts.tid)
GROUP BY ts.tid,num_plyr

我猜你们的赞助商给了球队很多钱。然后你想知道赞助团队中每个孩子的捐款比例

然后,您将需要以下内容:

SELECT p.tid,(SUM(COALESCE(s.adonated,0)) / COUNT(p.pid)) AS "Amount donated per Child"
FROM player p 
LEFT OUTER JOIN tsponsors s ON s.tid=p.tid
GROUP BY p.tid

我还使用了一个
左外部联接
,以便在没有赞助商的团队中显示0$。

假设表
t赞助商
player
以某种方式链接,您需要将其放入查询中。例如:
其中s.playerID=p.playerID
表结构将有所帮助:此外,当对一对多关系中的值进行求和时,必须在联接之前完成,否则最终会得到膨胀/收缩的值。最初我选择(sum(adotated))作为“每个孩子捐赠的金额”来自t赞助商s,球员p,t队,其中s.tid=t.tid和t.tid=p.tid;我的表格是有组织的,其中团队包含许多球员,团队有许多赞助商。所以我试着加入球员的团队tid和团队tid,团队tid和赞助商tid。我仍然得到了一个夸大的数字,我认为我做的连接是错误的。@Jeremy:那么我相信你需要在你的问题和你想要实现的目标中加入表格结构。我添加了表的结构,它们是如何链接的,以及我想从我的查询中得到什么。上面的查询不起作用,我得到一个错误,说没有一个组函数。感谢这一点,我工作得很好,但我不需要外部连接,因为所有团队都必须有赞助商。