如何解决如何在联接上使用分区来计数
我很困惑如何在count
上不使用group by
的情况下获得join
我知道我可以使用group by
获得所需的结果,但是表联接很长,并且带有case语句的选定标题很多,所以我希望避免这种情况
我敢肯定,在使用partition over
之前已经完成了此操作,但是找不到在联接上使用它的好例子。也许不可能!?
我尝试过
select
p.FirstName,p.Surname,count(pr.RelativePersonId) over (partition by pr.RelativePersonId) as [RelativesOnRecord]
from People p
left join PersonRelatives pr
on p.PersonId = pr.PersonId
对于我的桌子:
人
PersonId | FirstName | Surname
1 Jim Bo
2 Harry Bo
3 Strong Bo
PersonRelatives
Id | PersonId | RelativePersonId
1 1 2
2 1 3
我要去哪里
PersonId | FirstName | Surname | RelativesOnRecord
1 Jim Bo 2
我也尝试过加入SELECT TOP 1
,但这只给了我一个结果,因此很重要。如果没有group by
,这是否有可能?
解决方法
似乎您按错误的列进行了分区-您想获取People
中每个人的亲属数量,对吗?使用
count(pr.RelativePersonId) over (partition by pr.PersonId) as [RelativesOnRecord]
,
根据您的示例,您想要进行汇总:
select p.PersonId,p.FirstName,p.Surname,count(*) as [RelativesOnRecord]
from People p join
PersonRelatives pr
on p.PersonId = pr.PersonId
group by p.PersonId,p.Surname;
您可以使用apply
或相关子查询,但是窗口函数在这里似乎不合适。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。