只有一张成绩表 里面包含学生姓名,课程名,成绩三列(SQL)查询A、每门课都大于65分的学生姓名 B、平均分最高的学生姓名C、单科成绩最高的学生姓名
时间: 2024-01-24 14:04:47 浏览: 35
好的,既然只有一张成绩表,我们需要使用 GROUP BY 和 HAVING 子句来实现每门课都大于65分的学生姓名的查询。
A、查询每门课都大于65分的学生姓名,可以使用以下 SQL 语句:
```
SELECT student_name
FROM score
GROUP BY student_name
HAVING MIN(score) > 65
```
这里假设学生姓名这一列为score表中的student_name。
B、查询平均分最高的学生姓名,可以使用以下 SQL 语句:
```
SELECT student_name
FROM score
GROUP BY student_name
ORDER BY AVG(score) DESC
LIMIT 1
```
这里假设学生姓名这一列为score表中的student_name。
C、查询单科成绩最高的学生姓名,可以使用以下 SQL 语句:
```
SELECT student_name
FROM score
WHERE score = (
SELECT MAX(score)
FROM score
WHERE course_name = '某门课程名'
)
```
这里假设课程名这一列为score表中的course_name。需要将"某门课程名"替换为实际的课程名。
相关问题
只有一张成绩表(SQL)查询A、每门课都大于65分的学生姓名 B、平均分最高的学生姓名C、单科成绩最高的学生姓名
好的,既然只有一张成绩表,我们需要使用 GROUP BY 和 HAVING 子句来实现每门课都大于65分的学生姓名的查询。
A、查询每门课都大于65分的学生姓名,可以使用以下 SQL 语句:
```
SELECT s.name
FROM score sc
JOIN student s ON sc.sid = s.sid
GROUP BY sc.sid
HAVING MIN(sc.score) > 65
```
B、查询平均分最高的学生姓名,可以使用以下 SQL 语句:
```
SELECT s.name
FROM score sc
JOIN student s ON sc.sid = s.sid
GROUP BY sc.sid
ORDER BY AVG(sc.score) DESC
LIMIT 1
```
C、查询单科成绩最高的学生姓名,可以使用以下 SQL 语句:
```
SELECT s.name
FROM score sc
JOIN student s ON sc.sid = s.sid
WHERE sc.score = (
SELECT MAX(score)
FROM score
WHERE cid = sc.cid
)
```
注意,这种方式只会返回一个学生,如果有多个学生在某门课的成绩相同且最高,那么只返回一个学生姓名。
成绩表里面有多门课程,要查询平均分最高的学生姓名sql
可以使用以下 SQL 语句查询平均分最高的学生姓名:
```
SELECT name
FROM scores
GROUP BY name
ORDER BY AVG(score) DESC
LIMIT 1;
```
其中,`scores` 是成绩表的表名,包含学生姓名和对应的分数,`name` 是学生姓名的列名,`score` 是分数的列名。`GROUP BY name` 按学生姓名进行分组,`AVG(score)` 计算每个学生的平均分,`ORDER BY AVG(score) DESC` 按平均分降序排序,`LIMIT 1` 取排序后的第一条记录,即平均分最高的学生姓名。