内部联接与计数

时间:2018-10-17 17:26:23

标签: sql sql-server

在我们的数据库中,我们有机组人员和非机组人员。每个机组人员和非机组人员都可以有朋友。

例如,一名机组人员与4名机组人员和2名非机组人员成为朋友。

我想知道的是我们AirlineCode = LH机组的非机组成员的平均数量。

我们涉及两个表:

AppUser:存储用户数据的位置。

这里有牢房 AppUser.IsCrew(0 =非机组成员,1 =机组成员) AppUser.AirlineCode(某种形式)

关注者:朋友列表已存储

Follower.FromUserId Follower.ToUserId

我们在那里存储AppUser.Id = 1有5个朋友,并关注Follower.ToUserId 3、4、5,依此类推

问题在这里,我什至不知道如何开始:

查询要检查的内容

a)所有AppUser.IsCrew = 1且有Airline.Code = LH b)在“关注者”表中检查他们关注的用户数,但只有AppUser.IsCrew中的ToUserId = 0 =

以某种方式返回平均值

非常感谢您的帮助

1 个答案:

答案 0 :(得分:0)

首先,您需要计算每个机组成员有多少非机组成员朋友。确保您也算出所有机组人员,即使他们没有任何朋友。

然后是对这些计数求平均值的问题。查询应如下所示:

with x as (
select
    c.id, count(n.id) as nc_total
  from AppUser c
  left join Follower f on f.FromUserId = c.id
  left join AppUser n on f.ToUserId = n.id and n.isCrew = 0
  where c.isCrew = 1
    and c.AirLineCode = 'LH'    
  group by c.id    
)
select avg(nc_total) from x