首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据其他行计算列的相对值?

如何根据其他行计算列的相对值?
EN

Stack Overflow用户
提问于 2014-05-06 10:34:41
回答 2查看 397关注 0票数 1

今天我工作的时候遇到了类似的情况。让我们假设存在表tblActor。我们需要更新演员的相对分数,这是同一演员和其他演员的个人得分之和:

  1. 如果任何其他演员属于不同城市的现任演员,那么其他演员的个人得分将为零。
  2. 如果任何其他演员属于同一城市,其个人得分低于或等于一名现任演员,则其他演员的个人得分为零。
  3. 如果任何其他演员属于同一城市,且其个人得分大于现任演员,则其他演员的个人得分将为(其他演员个人得分-当前演员个人得分)。
  4. 同一个演员的分数将是演员的个人分数。 援助城IndividualScore相对得分1X1 (1 + (2-1) +(3-1)+0+0+ 0) 2X2 (0 +2+(3-2)+0+0+ 0) 3X3 (0 +0+3+0+0+0)+ 0) 4Y2 (0 +0+0+2+0+3)5 Y0 (0 +0+0+2+0+0+3)6 Y3 (0 +0+0+2+0+3)

那么如何计算这个相对列类型的字段。我对sql很陌生。请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-06 11:33:57

尝尝这个

代码语言:javascript
复制
select 
  a.AID
, a.City
, a.IndividualScore
, a.IndividualScore
  + sum(case when oa.IndividualScore > a.IndividualScore then oa.IndividualScore - a.IndividualScore else 0 end) as RelativeScore
from tblActor a
left join tblActoroa on a.City = oa.City-- other actor
where a.AID != oa.AID
group by   
  a.AID
, a.City
, a.IndividualScore

此查询使用几乎与Gordon相同的原则,并显示(几乎)与在OP中发布的结果相同的结果。

但是,我不明白为什么RelativeScore = 5,其中AID = 6;根据您的规则(正如我所理解的),它应该返回3,因为AID =4的IndividualScore小于AID = 6的IndividualScore。

票数 1
EN

Stack Overflow用户

发布于 2014-05-06 10:44:40

规则本质上是:“将某一演员与同一城市所有其他演员的得分之差相加,而其他演员的得分较高”。唉,您无法在窗口函数中完全做到这一点,但是您可以通过自联接:

代码语言:javascript
复制
select t.aid, t.city, t.IndividualScore,
       (t.IndividualScore + sum(t2.IndividualScore - t.IndividualScore)) as RelativeScore
from table t left outer join
     table t2
     on t.city = t2.city and t.aid <> t2.aid and t.IndividualScore < t2.IndividualScore
group by t.aid, t.city, t.IndividualScore;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23492304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档