You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使视图中TotalScore与Reference数据唯一关联,避免重复求和?

问题解决方法

问题根源在于你先通过RateeId将prs_rate与prs_totalratee关联,再执行SUM计算。这种一对多关联会让同一条评分记录被重复匹配到不同的Reference记录上,最终导致相同RateeId下不同Reference的TotalScore完全一致。

正确的处理逻辑是先计算每个RateeId的总分,再关联其他表,避免重复计算。修改后的视图脚本如下:

select 
    e.Id, 
    b.Name, 
    f.SiteName, 
    e.Reference, 
    e.Amount, 
    e.DateTransaction, 
    rate_total.TotalScore, 
    a.Status, 
    a.CreatedByUserId
from prs_totalratee as e
left outer join core_vSiteInfo as f on e.SiteCatered = f.siteCode
left outer join prs_ratee as b on e.RateeId = b.Id
left outer join (
    -- 先按RateeId、状态、创建人分组计算总分
    select 
        RateeId,
        Status,
        CreatedByUserId,
        SUM(Score * (c.Weight / 100) * (d.Weight / 100)) as TotalScore
    from prs_rate as a
    left outer join prs_kpi as c on a.KpiId = c.Id
    left outer join prs_group as d on c.GroupId = d.Id
    group by RateeId, Status, CreatedByUserId
) as rate_total on e.RateeId = rate_total.RateeId
-- 关联prs_rate时匹配状态和创建人,保证数据一致性
left outer join prs_rate as a on e.RateeId = a.RateeId 
    and a.Status = rate_total.Status 
    and a.CreatedByUserId = rate_total.CreatedByUserId
group by e.Id, b.Name, f.SiteName, e.Reference, e.Amount, e.DateTransaction, rate_total.TotalScore, a.Status, a.CreatedByUserId

核心调整说明

  • 新增子查询rate_total:先按RateeId、Status、CreatedByUserId分组,单独计算每个被评分人的总分,确保同一RateeId的分数只计算一次。
  • 主查询以prs_totalratee为基准关联其他表:避免一对多关联导致的重复计算问题,让每个Reference对应正确的独立总分。
  • 补充关联匹配条件:关联prs_rate时增加Status和CreatedByUserId的匹配,保证评分状态、创建人与总分的对应关系准确。

内容的提问来源于stack exchange,提问作者Clyde Tome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 06:01:44