首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中设置分数更改标志

在SQL中设置分数更改标志
EN

Stack Overflow用户
提问于 2016-08-12 01:46:41
回答 3查看 56关注 0票数 0

我有一张表,上面有不同星期的考试成绩。我想创建一个带有分数差异的额外列,比如如果分数减少了0-5,那么是1,5-9,然后是2,10+,然后是3,如果分数增加了,那么是4。这是我在表格中的样本数据。

代码语言:javascript
复制
--DROP TABLE #Scores
CREATE TABLE #Scores (
    NAME varchar(10),
    Grade varchar(10),
    Subject varchar(25),
    Exam_Date datetime,
    Score int
)

INSERT INTO #Scores
    VALUES ('Sam', 'XI', 'Maths', '2016-08-01 15:47:29.533', 38), 
           ('Sam', 'XI', 'Maths', '2016-07-25 15:47:29.533', 50), 
           ('Mike', 'XI', 'Maths', '2016-08-01 15:47:29.533', 50), 
           ('Mike', 'XI', 'Maths', '2016-07-25 15:47:29.533', 45)

SELECT * FROM #Scores

感谢您的支持

EN

回答 3

Stack Overflow用户

发布于 2016-08-12 01:55:34

您将使用lag()case

代码语言:javascript
复制
select s.*,
       (case when score - prev_score < 0 then 4
             when score - prev_score <= 5 then 1
             when score - prev_score <= 9 then 2
             else 3
        end) as score_diff
from (select s.*,
             lag(score) over (partition by name, subject order by exam_date) as prev_score
      from #scores s
     ) s;
票数 1
EN

Stack Overflow用户

发布于 2016-08-12 04:23:37

感谢@戈登·林诺夫,我稍微修改了一下代码。逻辑是正确的,只是稍微改变一下数学。

代码语言:javascript
复制
select s.*,
       (case when score - prev_score > 0 then 4
             when score - prev_score between -5 and 0 then 1
             when score - prev_score between -9 and -5 then 2
             else 3
        end) as score_diff
from (select s.*,
             lag(score) over (partition by name, subject order by exam_date) as prev_score
      from #scores s
     ) s;

结果被捕获并显示如下:

票数 1
EN

Stack Overflow用户

发布于 2016-08-12 01:55:58

考虑进一步的标准化步骤。将分数保存在单独的表中。将学生与分数表相关联。

您必须决定如何引用以前的分数与当前分数进行比较。如果您创建了一个附加字段来存储上次分数的更改,则可以使用显示当前分数的计算字段,或者将上一个分数与新分数一起存储在字段中,然后使用计算字段显示两者之间的更改。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38902938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档