首页 > 解决方案 > 计算组中的滞后差异

问题描述

我正在尝试仅使用 SQL 来解决问题(结合 SQL 和 Python 时我能够做到这一点)。

基本上我想做的是计算每个候选人的分数变化,其中分数包括加入分数查找表,然后将这些单独的事件分数相加。如果候选人失败,他们必须重新参加比赛。这是一个示例输出:

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

我想要的是首先只计算那些参加复试的候选人的分数变化,其中分数变化只是复试的总分数的差异是 true 减去 retest = false:

| 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;

我认为解决方案涉及使用 LAG 和 PARTITION,但我无法理解。谢谢!

标签: pythonsql

解决方案


如果有人只重新测试一次,那么您可以使用联接:

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';

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


推荐阅读