微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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子句中并括在括号中.您可以使用普通选择可以使用的任何内容,顶部,排序依据,聚合函数等.您唯一不能使用的是与主体中的表相关联.哦,和CTE.派生表必须是别名.

在先前的示例派生表’a’中,按customerid选择服务器计数.主体将其视为具有CustomerId和ServerCount列的表,可以用作所有列出的表中的任何列.在设置和’a’之间执行customerid连接.由于这是1:1的关系(两个表在给定customerid的情况下产生单行),因此不会发生重复.

原文地址:https://www.jb51.cc/mssql/78284.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐