MySQL统计查询选课了的学生人数和未选课的学生人数
时间: 2024-02-20 07:56:53 浏览: 160
可以使用MySQL的聚合函数和条件表达式来进行统计查询。假设选课信息存储在名为`course`的表中,学生信息存储在名为`student`的表中。则可以使用以下SQL语句进行查询:
```sql
SELECT
SUM(CASE WHEN course_id IS NOT NULL THEN 1 ELSE 0 END) AS selected_count,
SUM(CASE WHEN course_id IS NULL THEN 1 ELSE 0 END) AS unselected_count
FROM
student
LEFT JOIN course ON student.id = course.student_id;
```
这条SQL语句中,首先对`student`表和`course`表进行左连接,以保证所有学生信息都被包含在结果中。然后使用条件表达式`CASE WHEN ... THEN ... ELSE ... END`来判断每个学生是否选课,如果选课则`course_id`不为空,未选课则`course_id`为空。最后使用聚合函数`SUM()`对每个条件的结果进行求和,得到选课了的学生人数和未选课的学生人数。
相关问题
mysql查询选课了的学生人数和未选课的学生人数
假设你有两张表,一张是学生信息表(Student),另一张是选课信息表(CourseSelection),其中学生信息表包含了所有学生的信息,选课信息表包含了学生选课的记录,包括学生ID和课程ID。
查询选课了的学生人数和未选课的学生人数的 SQL 语句如下:
```
SELECT
COUNT(DISTINCT Student.ID) AS '选课人数',
(SELECT COUNT(*) FROM Student) - COUNT(DISTINCT CourseSelection.StudentID) AS '未选课人数'
FROM
Student
LEFT JOIN
CourseSelection ON Student.ID = CourseSelection.StudentID;
```
上面的 SQL 语句使用了 COUNT、DISTINCT、LEFT JOIN 等关键字。
- COUNT:用于计算行数或非空值的数量。
- DISTINCT:用于去除重复的值。
- LEFT JOIN:用于将两张表按照指定条件进行连接,左表中的所有行都会被保留,而右表中没有匹配的行则会用 NULL 填充。
上面的查询语句中,COUNT(DISTINCT Student.ID) 表示选课了的学生人数,它通过 LEFT JOIN 连接学生信息表和选课信息表,并使用 DISTINCT 去除重复的学生ID,最后使用 COUNT 计算行数。
(SELECT COUNT(*) FROM Student) - COUNT(DISTINCT CourseSelection.StudentID) 表示未选课的学生人数,它使用了子查询和数学计算。子查询语句 SELECT COUNT(*) FROM Student 用于计算学生信息表中的总行数,然后减去选课了的学生人数,得到未选课的学生人数。
执行以上 SQL 语句后,将返回一个结果集,其中包含两个列:选课人数和未选课人数。
MySQL(8)删除班级名称为电子2101的所有学生信息。(9)统计查询选课了的学生人数和未选课的学生人数。
(8) 删除班级名称为电子2101的所有学生信息的 MySQL 语句如下:
```
DELETE FROM student WHERE class_name='电子2101';
```
其中,`student` 为学生信息表,`class_name` 为班级名称字段。
(9) 统计查询选课了的学生人数和未选课的学生人数的 MySQL 语句如下:
选课了的学生人数:
```
SELECT COUNT(*) FROM student WHERE course_name IS NOT NULL;
```
未选课的学生人数:
```
SELECT COUNT(*) FROM student WHERE course_name IS NULL;
```
其中,`course_name` 为选课名称字段。
阅读全文