感谢您事先提供的任何帮助,我无法将我的SQL技能包装在这一项上。我有两个这样的表:
Settings Customerid ViewerLimit 1 50 2 50
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函数内进行子查询。有很多客户,每个客户可能有很多服务器,因此手动操作将变得太复杂。感谢您的投入。
这是在衍生表中计数的非启发式版本:
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的情况下都产生单行),所以不会发生重复。