我正在做一个项目,在这个项目中,我们应该评估供应商,在这个数据库中,我有这个表
+------+---------------------+------------+-----------+
| Id | EvaluationMethodId | FromScore | ToScore |
+------+---------------------+------------+-----------+
| 1 | 2 | 1 | 20 |
| 2 | 2 | 21 | 50 |
| 3 | 2 | 51 | 70 |
| 4 | 2 | 71 | 100 |
| 5 | 3 | 1 | 20 |
| 6 | 3 | 31 | 40 |
+------+---------------------+------------+-----------+
这张表对分数进行了分类,我可以肯定的是
范围值填充1到100 (就像上面的示例一样)。
我正在寻找这样的东西:
+---------------------+------------+
| EvaluationMethodId | Sum |
+---------------------+------------+
| 2 | 100 |
| 3 | 30 |
+---------------------+------------+
这是我尝试的方式:
WITH myUpdate
AS (SELECT emg.Id,emg.EvaluationMethodId,
SUM(emg.ToGrade - emg.FromGrade) + 1 AS SumScope
FROM generalsup.EvaluationMethodGrading emg
GROUP BY emg.Id,emg.EvaluationMethodId)
SELECT myUpdate.EvaluationMethodId, SUM(myUpdate.SumScope) AS SumScopeAll
FROM myUpdate
GROUP BY myUpdate.EvaluationMethodId;
但我使用窗口函数,它对服务器的开销较小。
发布于 2020-01-08 21:38:22
由于分数中没有重叠的情况,因此可以使用
和
select EvaluationMethodId, sum(ToScore - FromScore + 1) [Sum]
from EvaluationMethodGrading
group by EvaluationMethodId
请参阅
演示
..。
结果:
> EvaluationMethodId | Sum
> -----------------: | --:
> 2 | 100
> 3 | 30
https://stackoverflow.com/questions/59645519
复制相似问题