在mysql中 查询score表,成绩列用优(大于等于九十)、良(75-90)、及格(60-75)、不及格(小于六十)
时间: 2023-07-10 08:26:17 浏览: 659
你可以使用MySQL的CASE语句来实现这个查询,代码如下:
```
SELECT
student_name,
score,
CASE
WHEN score >= 90 THEN '优'
WHEN score >= 75 AND score < 90 THEN '良'
WHEN score >= 60 AND score < 75 THEN '及格'
ELSE '不及格'
END AS grade
FROM
score_table;
```
这个查询会返回一个包含学生姓名、成绩和成绩等级的表格,其中成绩等级根据分数判断。注意,我没有使用你提到的表名,你需要将其替换为你的表名。
相关问题
在mysql中,查询并显示0001号课程每个学生的姓名和分数等级,大于或等于90等级为优秀,80-89等级为良,70-79等级为中,60-69等级为及格,小于60为不及格。成绩在grade表中,姓名在student表中,两表以学号进行连接
你可以使用SQL的CASE语句和JOIN操作来达到这个目的。假设你的表名为`grade`(包含学生ID(student_id)、课程ID(course_id)和分数(score))和`student`(包含学号(student_id)和姓名(name)),可以编写如下的查询:
```sql
SELECT s.name,
CASE
WHEN g.score >= 90 THEN '优秀'
WHEN g.score BETWEEN 80 AND 89 THEN '良'
WHEN g.score BETWEEN 70 AND 79 THEN '中'
WHEN g.score BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END AS grade_level
FROM student s
JOIN grade g ON s.student_id = g.student_id
WHERE g.course_id = 1;
```
这个查询首先通过JOIN将学生表和成绩表按学号关联起来,然后根据分数范围确定等级,并只显示0001号课程的学生。
mysql创建一存储过程,判断学生的平均分,大于等于90,等级为优,大于等于80,等级为良,大于等于70,等级为中,大于等于60,等级为及格,小于60,等级为不及格,要求在存储过程中使用游标和异常处理机制。
在MySQL中,你可以使用存储过程来实现这个需求。这里是一个简单的示例,说明如何创建一个存储过程,使用游标遍历数据,根据学生的平均分进行等级判断,并包含异常处理:
```sql
DELIMITER //
CREATE PROCEDURE GradeStudents(IN student_table_name VARCHAR(50), IN student_id_column VARCHAR(20), IN average_score_column VARCHAR(20))
BEGIN
DECLARE @student_id INT;
DECLARE @average_score DECIMAL(5,2);
DECLARE @grade VARCHAR(10);
DECLARE @cursor CURSOR FOR
SELECT id, average_score
FROM `student_table_name`
ORDER BY id;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- 处理任何SQL异常
ROLLBACK;
INSERT INTO error_log (error_message) VALUES (CURRENT_SQLSTATE, @@ERROR, SQLERROR());
LEAVE grade_loop;
END;
START TRANSACTION;
OPEN @cursor;
grade_loop: LOOP
FETCH @cursor INTO @student_id, @average_score;
IF @average_score IS NULL THEN
LEAVE grade_loop;
END IF;
IF @average_score >= 90 THEN
SET @grade = '优';
ELSEIF @average_score >= 80 THEN
SET @grade = '良';
ELSEIF @average_score >= 70 THEN
SET @grade = '中';
ELSEIF @average_score >= 60 THEN
SET @grade = '及格';
ELSE
SET @grade = '不及格';
END IF;
-- 在这里可以更新学生表中的grade字段,或者执行其他操作
-- 示例:UPDATE `student_table_name` SET grade = @grade WHERE id = @student_id;
PREPARE stmt FROM CONCAT('UPDATE `student_table_name` SET grade = ''', @grade, ''' WHERE id = ?', @student_id);
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
COMMIT;
END LOOP;
CLOSE @cursor;
END //
DELIMITER ;
```
阅读全文