mysql语句实验题目7 假设毕业要求为修够80学分,请统计计算机学院内学生距离毕业要求还差多少学分,并按所差分数的升序排列。、
时间: 2024-03-26 13:38:31 浏览: 47
可以使用以下MySQL语句来实现该功能:
```
SELECT student_name, 80 - SUM(credit) AS credits_left
FROM student
WHERE department = '计算机学院'
GROUP BY student_name
HAVING credits_left > 0
ORDER BY credits_left ASC;
```
解释一下这个语句:
首先,我们从 `student` 表中选择学生姓名和已修学分,计算出距离毕业还差多少学分,即 `80 - SUM(credit)`。
然后,我们使用 `WHERE` 子句来筛选出计算机学院的学生。
接着,我们使用 `GROUP BY` 子句按照学生姓名对结果进行分组。
接下来,我们使用 `HAVING` 子句来筛选出还差学分数大于0的学生。
最后,我们使用 `ORDER BY` 子句按照所差学分数的升序排列结果。
注意,在这个语句中,我们假设 `student` 表包含以下列:`student_name`(学生姓名)、`department`(学生所在院系)和 `credit`(学生已修学分)。如果你的表结构不同,请相应地修改语句中的列名。
相关问题
运用MySQL语句:查询所有同学的学分情况(假设课程成绩≥60分时可获得该门课程的学分),要求显示学生的学号s_no、姓名s_name、总学分(将该列定名为:total_score)。(用JOIN)
好的,以下是MySQL语句:
```
SELECT s.s_no, s.s_name, SUM(c.credit) AS total_score
FROM student s
JOIN score sc ON s.s_no = sc.s_no
JOIN course c ON sc.c_no = c.c_no
WHERE sc.score >= 60
GROUP BY s.s_no, s.s_name
```
解释一下:
首先,我们需要从 student 表中获取学生的学号和姓名,从 course 表中获取每门课程的学分,从 score 表中获取每个学生修的每门课的成绩。因此,我们需要使用 JOIN 连接三个表。
然后,我们需要过滤掉成绩不及格的课程,即 WHERE sc.score >= 60。
最后,我们需要按照学号和姓名分组,并且将每个学生修的所有及格课程的学分求和,得到总学分。这里使用了 SUM 函数和 GROUP BY 子句。
最终结果显示的是每个学生的学号和姓名,以及他们的总学分。
MySQL语句对SC1表设计一个触发器,该触发器保证每个学生所选课程的总学分不超过12分。用MySQL语句验证此触发器。
可以使用如下的MySQL语句创建一个名为`check_credit`的触发器:
```mysql
DELIMITER //
CREATE TRIGGER check_credit
BEFORE INSERT ON SC1
FOR EACH ROW
BEGIN
DECLARE total_credit INT;
SELECT SUM(Credit) INTO total_credit FROM Course WHERE CourseID IN (SELECT CourseID FROM SC1 WHERE SID = NEW.SID);
IF total_credit + NEW.Credit > 12 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Selected courses exceed credit limit.';
END IF;
END//
DELIMITER ;
```
该触发器的作用是在每次向`SC1`表插入新记录之前,计算该学生已经选修的课程的学分总和,并且将新选修的课程学分加上去,如果超过12分,则触发器会抛出一个异常,阻止新记录的插入。
可以使用如下的MySQL语句验证该触发器:
```mysql
INSERT INTO SC1 (SID, CourseID, Credit) VALUES (1, 'C001', 5);
INSERT INTO SC1 (SID, CourseID, Credit) VALUES (1, 'C002', 6);
INSERT INTO SC1 (SID, CourseID, Credit) VALUES (1, 'C003', 2);
-- 这里应该会抛出异常,因为总学分已经超过了12分
INSERT INTO SC1 (SID, CourseID, Credit) VALUES (1, 'C004', 1);
```
阅读全文