mysql查询每门课程不及格学生人数
时间: 2024-10-12 15:14:56 浏览: 24
在MySQL中,要查询每门课程不及格的学生人数,通常需要使用JOIN操作连接包含学生信息和成绩信息的数据表,假设我们有两个表:
1. `students` 表(字段:student_id, name)
2. `grades` 表(字段:course_id, student_id, grade)
你可以使用以下SQL查询示例:
```sql
SELECT grades.course_id, COUNT(*) as total_students,
SUM(CASE WHEN grade < '60' THEN 1 ELSE 0 END) as failed_students
FROM students
JOIN grades ON students.student_id = grades.student_id
GROUP BY grades.course_id;
```
这个查询做了以下几件事:
- 使用JOIN将`students`表和`grades`表基于学生ID关联起来。
- 对每个课程(course_id),计算有多少学生的grade小于60(一般及格线),这通过CASE WHEN表达式实现,如果grade小于60,则计数加一,否则不计数。
- 使用COUNT(*)统计总学生数,SUM函数对不及格学生计数。
- GROUP BY grades.course_id按课程分组,以便获取每个课程的结果。
相关问题
mysql 完成年报业务,统计每年每门课程及格的学生人数和不及格的学生人数。
好的,以下是完成年报业务的 SQL 查询语句:
```sql
SELECT year, course, COUNT(CASE WHEN grade >= 60 THEN 1 ELSE NULL END) AS pass_count, COUNT(CASE WHEN grade < 60 THEN 1 ELSE NULL END) AS fail_count
FROM grades
GROUP BY year, course;
```
该查询语句使用了 GROUP BY 子句将成绩按照年份和课程进行分组,然后使用 COUNT 和 CASE WHEN 子句分别统计及格和不及格的学生人数,并将结果作为 pass_count 和 fail_count 的别名输出。
你需要根据实际情况修改表名和字段名,以及查询条件和其他细节。
mysql写一个存储过程统计每年每门课程及格的学生人数和不及格的学生人数。
好的,以下是存储过程的代码:
```sql
DELIMITER $$
CREATE PROCEDURE `count_students`()
BEGIN
DECLARE year INT;
DECLARE course VARCHAR(50);
DECLARE pass_count INT;
DECLARE fail_count INT;
DECLARE cur CURSOR FOR SELECT DISTINCT year, course FROM grades;
OPEN cur;
SET pass_count = 0;
SET fail_count = 0;
read_loop: LOOP
FETCH cur INTO year, course;
IF (year IS NULL) THEN
LEAVE read_loop;
END IF;
SELECT COUNT(*) INTO pass_count FROM grades WHERE year = year AND course = course AND grade >= 60;
SELECT COUNT(*) INTO fail_count FROM grades WHERE year = year AND course = course AND grade < 60;
INSERT INTO student_count (year, course, pass_count, fail_count) VALUES (year, course, pass_count, fail_count);
END LOOP;
CLOSE cur;
END$$
DELIMITER ;
```
该存储过程首先使用游标获取所有不同的年份和课程,然后使用两个 SELECT 语句分别统计及格和不及格的学生人数,并将结果插入到一个名为 student_count 的表中,该表应该包含 year、course、pass_count 和 fail_count 四个字段。
你需要根据实际情况修改表名和字段名,以及存储过程中的其他细节。
阅读全文