查询20岁的所有有选课的学生的学号、姓名、平均成绩(avg_score,此为列名,下同)(平均成绩四舍五入到个位)、总成绩(sum_score)。如果一门课选两次以上,只计算最高成绩那一次
时间: 2024-10-19 18:17:18 浏览: 27
查询学生信息需要假设有一个包含学生数据的表,如"Students"表,其中包含字段如student_id(学号),name(姓名),age(年龄),course_scores(课程分数列表)。我们可以构造一条SQL查询来获取满足条件的信息:
```sql
SELECT
student_id AS 学号,
name AS 姓名,
ROUND(AVG(course_scores)) AS 平均成绩,
MAX(CASE WHEN course_id IN (SELECT DISTINCT course_id FROM Students GROUP BY course_id HAVING COUNT(*) > 1) THEN course_scores ELSE NULL END) AS 总成绩
FROM
Students
WHERE
age = 20
GROUP BY
student_id, name;
```
这条SQL做了以下几件事:
1. 筛选出年龄为20岁的学生。
2. 计算每个学生的每门课程平均成绩(ROUND函数用于四舍五入到个位)。
3. 对于那些某门课程选择超过一次的情况(通过子查询找出这些课程_id),它取最高的成绩作为总成绩。
相关问题
查询每位学生的学号、姓名和选课成绩的平均成绩,成绩为null不计算在平均成绩之内,按从高到低降序排列
你可以通过以下SQL查询来获取每位学生的学号、姓名以及他们的选课成绩的平均成绩,并排除成绩为NULL的情况,最后按照平均成绩从高到低排序:
```sql
SELECT student_id, name, AVG(score) AS avg_score
FROM students
WHERE score IS NOT NULL
GROUP BY student_id, name
ORDER BY avg_score DESC;
```
这个查询做了以下几件事:
1. `SELECT student_id, name, AVG(score) AS avg_score`: 选择需要的字段,包括每个学生的学号(student_id),姓名(name)和成绩的平均分(avg_score)。
2. `FROM students`: 从"students"表中选取数据。
3. `WHERE score IS NOT NULL`: 过滤掉成绩为NULL的行,只考虑有成绩的学生。
4. `GROUP BY student_id, name`: 按照学生ID和姓名分组,以便计算每个人的平均成绩。
5. `ORDER BY avg_score DESC`: 结果按照平均成绩(avg_score)降序排列,最高的平均成绩排在最前面。
查询学号为S5的同学所学课程的平均成绩,查询结果中列名显示为平均成绩。
可以使用如下的SQL语句进行查询:
```
SELECT AVG(score) AS average_score
FROM course_selection
WHERE student_id = 'S5';
```
其中,`course_selection` 表为选课表,包含了学生的选课信息,包括学号 `student_id`、课程号 `course_id` 和分数 `score`。使用 `AVG` 聚合函数计算学号为 S5 的学生所学课程的平均成绩,然后使用 `AS` 关键字为聚合函数指定别名,使得查询结果的列名符合要求。
阅读全文