今天工作时遇到类似的情况。 让我们假设有表tblActor。我们需要更新演员的相对分数,即相同和其他演员的个人得分之和:
同一个演员的得分将是演员的个人得分。
Aid City IndividualScore Relative Score
1 X 1 (1 + (2-1) + (3 -1) + 0 + 0 + 0)
2 X 2 (0 + 2 + (3 -2) + 0 + 0 + 0)
3 X 3 (0 + 0 + 3 + 0 + 0 + 0)
4 Y 2 (0 + 0 + 0 + 2 + 0 + (3-2))
5 Y 0 (0 + 0 + 0 + 2 + 0 + (3-0))
6 Y 3 (0 + 0 + 0 + 2 + 0 + 3))
那么如何计算这种相对列类型的字段。我是sql东西的新手。 请帮忙。
答案 0 :(得分:1)
规则基本上是:"总结给定演员与同一城市中所有其他演员之间得分的差异,其他演员得分较高"。唉,你不能在窗口函数中做到这一点,但你可以自己加入:
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 :(得分:1)
试试这个
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。