第51讲-求不及格学生名单和成绩-作业1讲解

本次讲座聚焦于第51讲的内容,主要讲解如何获取并分析不及格学生的名单及他们的成绩,帮助理解学生表现情况。

在这里插入图片描述

Sub 填写不及格学生成绩()
    Dim i As Long, j As Long, pos As Long, col As Long
    pos = 3
    col = Range("k1").Column
    For i = 4 To 8
        
        For j = 3 To Range("a2").CurrentRegion.Rows.Count
            If Cells(j, i) < 60 Then
                Cells(pos, col) = Cells(j, 1)
                Cells(pos, col + 1) = Cells(j, 3)
                Cells(pos, col + 2) = Cells(j, i)
                pos = pos + 1
            End If
        Next
        pos = 3
        col = col + 3
    Next
End Sub

在这里插入图片描述

Sub 计算结果()
    '如果total 没赋值它就是0
    '利用total 如果是0 那么就一定是被减数,把当前单元格的数值赋给它
    Dim total As Long, sum As Long, i As Long
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row + 1
        If total = 0 Then
            total = Range("a" & i)
        ElseIf Range("a" & i) <> "" Then 
        '如果total 不是0,而且当前的单元格有数值
        '就说明这是要被减掉的部分
            sum = sum + Range("a" & i)
        Else '如果碰到了空单元格,那么就是要填入结果了,注意再把total 清0 因为下一个单元格会是被减数了
            Range("a" & i) = total - sum
            total = 0
            sum = 0
        End If

    Next
End Sub
<think>我们正在处理一个SQL查询需:查找成绩不及格学生学号、课号成绩,并按成绩降序排列。 假设我们有一个成绩表(例如名为"scores"的表),其中包含学号(student_id)、课号(course_id)成绩(grade)等字段。 不及格通常是指成绩低于60分(假设成绩为百分制)。 我们需要选择出所有成绩小于60的记录,并按照成绩从高到低(降序)排列。如果成绩相同,可以按学号或课号进一步排序,但题目未指定,所以我们可以按成绩降序,然后按学号升序或降序?这里题目没有要,我们可以只按成绩降序。如果需要明确,可以增加第二个排序条件(例如学号升序)以确保顺序一致。但问题只要成绩降序,所以我们可以只按成绩降序。 因此,SQL语句可以写为: ```sql SELECT student_id, course_id, grade FROM scores WHERE grade < 60 ORDER BY grade DESC; ``` 但是,如果题目要成绩相同的情况下再按学号降序或升序,我们可以添加多个排序条件。不过这里没有特别说明,所以我们就按成绩降序即可。 另外,注意成绩可能是整数也可能是小数,所以比较时用<60是合适的。 如果成绩字段有可能为NULL,我们可能需要排除NULL值,因为不及格通常是指有效成绩低于60,NULL表示没有成绩,不视为不及格。所以我们可以加上条件 grade IS NOT NULL,不过题目要不及格,所以不及格的前提是成绩存在且小于60。所以我们可以这样写: ```sql SELECT student_id, course_id, grade FROM scores WHERE grade < 60 AND grade IS NOT NULL ORDER BY grade DESC; ``` 但是,如果我们的表设计已经保证了成绩不会为NULL(比如有约束),那么可以省略grade IS NOT NULL。为了保险起见,我们可以加上。 但是,题目中没有提到NULL的情况,所以我们按照常规处理,加上非NULL条件可以避免遗漏。 不过,在SQL中,任何与NULL的比较都会返回未知(unknown),在WHERE条件中,只有条件为真(true)才会被选中。因此,如果grade是NULL,那么条件grade<60的结果是unknown,所以不会被选中。因此,实际上不需要显式地写grade IS NOT NULL。所以我们可以简化为: ```sql SELECT student_id, course_id, grade FROM scores WHERE grade < 60 ORDER BY grade DESC; ``` 这个查询就可以满足要。 现在,我们需要考虑生成相关问题。根据系统指令,我们要生成相关问题。 相关问题可以围绕这个SQL查询展开,例如: 1. 如何修改这个查询以显示学生的姓名而不只是学号?(假设有学生信息表) 2. 如何统计每门课程的不及格人数? 3. 如果成绩是等级制(如'A','B','C','D','F'),如何查询不及格(比如'F')的学生? 因此,我们可以在回答后添加相关问题。 注意:回答中引用的段落末尾自然地添加引用标识。但是在这个问题中,我们并没有引用特定的文献或资料,所以不需要添加引用标识。如果需要,我们可以假设引用了某个教材,但这里没有具体引用来源,所以可以不添加。 根据用户上一次的问题回答,用户是在学习SQL查询,所以相关问题可以围绕SQL的扩展应用。 </think>以下是SQL查询成绩不及格学生学号、课号成绩,并按成绩降序排列的实现方法: ```sql SELECT student_id AS 学号, course_id AS 课号, grade AS 成绩 FROM scores WHERE grade < 60 -- 筛选不及格成绩 ORDER BY grade DESC; --成绩降序排列 ``` ### 说明: 1. **核心逻辑**: - `WHERE grade < 60`:筛选成绩低于60分(不及格)的记录 - `ORDER BY grade DESC`:按成绩从高到低降序排列 - 字段别名(`AS`)可增强结果可读性(可选) 2. **假设表结构**: ```sql CREATE TABLE scores ( student_id VARCHAR(10), -- 学号 course_id VARCHAR(10), -- 课号 grade INT -- 成绩(百分制) ); ``` 3. **扩展场景**: - 若需排除缺考(`NULL`成绩): ```sql WHERE grade < 60 AND grade IS NOT NULL ``` - 若需显示学生姓名(需连接学生表): ```sql SELECT s.student_id, st.name, s.course_id, s.grade FROM scores s JOIN students st ON s.student_id = st.id WHERE s.grade < 60 ORDER BY s.grade DESC; ``` ### 示例结果: | 学号 | 课号 | 成绩 | |---------|--------|------| | 2023001 | MATH03 | 59 | | 2023005 | PHYS02 | 58 | | 2023012 | CHEM05 | 55 | | 2023008 | BIO01 | 48 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值