今天我工作的时候遇到了类似的情况。让我们假设存在表tblActor。我们需要更新演员的相对分数,这是同一演员和其他演员的个人得分之和:
那么如何计算这个相对列类型的字段。我对sql很陌生。请帮帮忙。
发布于 2014-05-06 11:33:57
尝尝这个
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。
发布于 2014-05-06 10:44:40
规则本质上是:“将某一演员与同一城市所有其他演员的得分之差相加,而其他演员的得分较高”。唉,您无法在窗口函数中完全做到这一点,但是您可以通过自联接:
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;https://stackoverflow.com/questions/23492304
复制相似问题