查询成绩比每门课程的平均成绩高的选课记录
时间: 2024-03-08 09:48:29 浏览: 90
假设有如下的表结构:
```
选课记录表(course_selection_record)
- 学生ID(student_id)
- 课程ID(course_id)
- 成绩(score)
```
则可以使用如下的 SQL 语句查询成绩比每门课程的平均成绩高的选课记录:
```
SELECT *
FROM course_selection_record csr
WHERE csr.score > (
SELECT AVG(score)
FROM course_selection_record
WHERE course_id = csr.course_id
)
```
该 SQL 语句首先使用了一个子查询来计算每门课程的平均成绩,然后在外部查询中筛选出成绩高于该平均成绩的选课记录。
相关问题
MySQL score表记录成绩,course表记录选课信息。请在score表中查询每门课程的选课人数和平均成绩,其中平均成绩保留整数
要在MySQL中查询`score`表中每门课程的选课人数和平均成绩,你可以使用联结(JOIN)、GROUP BY、COUNT和AVG函数。假设`score`表有`student_id`字段表示学生ID,`course_id`字段表示课程ID,`score`字段记录分数。而`course`表有`course_id`字段作为共同标识。
SQL查询示例:
```sql
SELECT c.course_id,
COUNT(DISTINCT s.student_id) AS student_count,
ROUND(AVG(s.score)) AS average_score
FROM score s
JOIN course c ON s.course_id = c.course_id
GROUP BY c.course_id;
```
这个查询做了以下几件事:
1. `JOIN`操作将`score`表和`course`表通过`course_id`关联起来。
2. `GROUP BY c.course_id`按课程ID分组,确保每个课程的数据都被单独计算。
3. `COUNT(DISTINCT s.student_id)`计算每个课程有多少不同的学生选择。
4. `AVG(s.score)`计算每个课程的平均成绩。
5. `ROUND(AVG(s.score))`对平均成绩四舍五入到最接近的整数。
以下查询操作使用SQL语句完成:查询共有多少学生 查询每个系有多少学生 查询选课门数在两门以上的同学的选课门数及其平均成绩 统计已有学生选课的课程的课程号,选课人数,最高成绩,最低成绩
针对这些SQL查询需求,我们需要假设相关的数据库表结构,例如:
1. 学生表(Students)包含字段:StudentID, StudentName
2. 系别表(Departments)包含字段:DepartmentID, DepartmentName
3. 课程表(Courses)包含字段:CourseID, CourseName
4. 选课记录表(Enrollments)包含字段:StudentID, CourseID, Grade
下面是对应的SQL语句示例:
1. 查询总学生数:
```sql
SELECT COUNT(*)
FROM Students;
```
2. 查询每个系的学生数:
```sql
SELECT Departments.DepartmentName, COUNT(Students.StudentID) AS TotalStudents
FROM Departments
JOIN Students ON Departments.DepartmentID = Students.DepartmentID
GROUP BY Departments.DepartmentName;
```
3. 查询选课门数在两门以上同学的选课门数及其平均成绩:
```sql
WITH HighGraders AS (
SELECT StudentID, COUNT(CourseID) as CourseCount, AVG(Grade) as AverageGrade
FROM Enrollments
GROUP BY StudentID
HAVING COUNT(CourseID) > 2
)
SELECT CourseCount, AverageGrade
FROM HighGraders;
```
4. 统计已有学生选课的课程信息:
```sql
SELECT Courses.CourseID, COUNT(DISTINCT Enrollments.StudentID) as NumberOfStudents,
MAX(Enrollments.Grade) as HighestScore, MIN(Enrollments.Grade) as LowestScore
FROM Courses
LEFT JOIN Enrollments ON Courses.CourseID = Enrollments.CourseID
GROUP BY Courses.CourseID;
```
阅读全文