计算组中的滞后差异

4ngedf3f  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(234)

我正试图用sql来解决一个问题(在结合sql和python时我能够做到这一点)。
基本上,我想做的是计算每个候选人的分数变化,其中一个分数包括加入一个分数查找表,然后将这些单独的事件分数相加。如果候选人失败了,他们需要重新参加活动。下面是一个示例输出:

| brandi_id | retest | total_score |
|-----------|--------|-------------|
| 1         | true   | 128         |
| 1         | false  | 234         |
| 2         | true   | 200         |
| 2         | false  | 230         |
| 3         | false  | 265         |

我想要的是首先只计算那些参加复试的考生的分数变化,其中分数变化将只是复试总分数为真减去复试=假的差值:

| brandi_id | difference |
|-----------|------------|
| 1         | 106        |
| 2         | 30         |

这是我正在使用的sql(我需要使用python)

select e.brandi_id, e.retest, sum(sl.scaled_score) as total_score
from event as e
left join apf_score_lookup as sl
on sl.asmnt_code = e.asmnt_code
and sl.raw_score = e.score
where e.asmnt_code in ('APFPS','APFSU','APF2M')
group by e.brandi_id, e.retest
order by e.brandi_id;

我认为解决方案包括使用延迟和分区,但我不能得到它。谢谢!

nhhxz33t

nhhxz33t1#

如果有人只重新测试一次,则可以使用连接:

select tc.*, tr.score, (tc.score - tr.score) as diff
from t tc join
     t tr
     on tc.brandi_id = tr.brandi_id and
        tc.retest = 'true' and tr.retest = 'false';

你没有描述你的table布局。如果结果来自您的问题中的查询,您可以将其作为cte插入。

相关问题