带子查询的SQL Sum?

标签 sql

感谢您事先提供的任何帮助,我无法将我的SQL技能与这一项结合起来...
我有两个这样的表:

设置

Customerid     ViewerLimit
       1                   50
       2                   50



发行

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

Sql Fiddle to play around

更新-尝试解释

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

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

关于带子查询的SQL Sum?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985674/

相关文章:

mysql - 我可以将同一个表中的多列与所有数据合并在一列中吗?

sql - 创建一个已经存在的 SQL 表会覆盖它吗?

Java JDBC Eclipse 使用 Oracle DB 填充 JTable

mysql - 仅在 Perl 上使用出生年份获取年龄

mysql - 从 SQL 导出的 View 更新 MS Access 中的表

php - 表单转sql表列

php - PHP查询插入的顺序

sql - 仅根据给定的 OrderId 获取记录

sql - 增量 DISTINCT/GROUP BY 操作

mysql - SQL 替换语句的正确 MariaDB 语法