python - 计算组中的滞后差异
问题描述
我正在尝试仅使用 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,但我无法理解。谢谢!
解决方案
如果有人只重新测试一次,那么您可以使用联接:
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 插入。
推荐阅读
- python - 尝试使用 curve_fit - 错误:“numpy.float64”类型的对象没有 len()
- stored-procedures - AWS Redshift 重载过程名称不起作用
- java - 干净的代码 - 使用一个或多个具有特定规则的过滤器搜索端点:如何避免多个“ifs”?
- image - GoogleSheet:根据单元格值和文件名插入图像
- android - 无法从片段中的 firebase 实时数据库中获取数据并且没有收到错误消息
- c# - EFCore 通过 AddAsync() 添加临时 ID
- excel - 过滤行以仅包含从“今天”到周日的值
- google-cloud-platform - 托管实例组中的抢占式虚拟机进入终止状态
- c# - C#“KeyCode”不包含“numberKey”的定义
- purescript - 将 Either 理解为 Functor