加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL查询与子查询?

发布时间:2020-12-12 06:38:55 所属栏目:MsSql教程 来源:网络整理
导读:感谢您提前提供任何帮助,我无法将我的SQL技能包装在这个… 我有两个这样的表: 设置 Customerid ViewerLimit 1 50 2 50 分配 Customerid ServerIP 1 stream3 1 stream4 2 stream3 我想计算每台服务器上的负载.如果客户有多个服务器,则客户会对其进行划分,因此
感谢您提前提供任何帮助,我无法将我的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的情况下产生单行),因此不会发生重复.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读