小编典典

带子查询的SQL Sum?

sql

感谢您事先提供的任何帮助,我无法将我的SQL技能包装在这一项上。我有两个这样的表:

Settings

Customerid ViewerLimit
1 50
2 50

Distribution

 Customerid     ServerIP
   1                 stream3
   1                 stream4
   2                 stream3

我想计算每个服务器上的负载。如果客户有多台服务器,则由客户来分担负载,因此客户1在这里将25的负载放在每台服务器上。我想要得到的结果是这样的:

ServerIP Load
stream3 75
stream4 25

我试图做一个和这个类似的求和函数:

sum(viewerlimit/(count # of servers)) as load group by serverip

但是我不能在sum函数内进行子查询。有很多客户,每个客户可能有很多服务器,因此手动操作将变得太复杂。感谢您的投入。


阅读 184

收藏
2021-05-16

共1个答案

小编典典

这是在衍生表中计数的非启发式版本:

select serverip, sum (viewerlimit/cast (ServerCount as float)) Load
from 
(
  select customerid, count(*) ServerCount from distribution group by customerid
) a
inner join settings
   on a.customerid = settings.customerid
inner join distribution 
   on settings.customerid = distribution.customerid
group by serverip

更新-尝试解释

派生表用于生成可以连接到查询主体的临时结果集。它放在from子句中,并用括号括起来。您可以使用普通select可以使用的任何东西,top,order
by,聚合函数等。您唯一不能使用的是与主体中的表的关联。哦,还有CTE。派生表必须为别名。

在先前的样本派生表中,“a”按客户ID选择服务器的数量。主体将其视为具有CustomerId和ServerCount列的表,可以用作所有列出的表中的任何列。在设置和“
a”之间执行对customerid的联接。因为这是1:1关系(两个表在给定一个customerid的情况下都产生单行),所以不会发生重复。

2021-05-16