sql sever查询每门功课成绩最好的前两位
时间: 2023-06-05 18:06:23 浏览: 494
对于您的问题,我可以为您提供以下 SQL 查询语句来查找每门功课成绩最好的前两位:
```sql
SELECT course_name, student_name, score
FROM (
SELECT course_name, student_name, score,
ROW_NUMBER() OVER(PARTITION BY course_name ORDER BY score DESC) AS ranking
FROM score_tbl
) tmp
WHERE ranking <= 2;
```
其中,score_tbl 表是存储学生成绩信息的表,包含以下字段:course_name (课程名称), student_name (学生姓名), score (成绩)。以上 SQL 查询语句会以每门功课为分组,按成绩从高到低排名,筛选出排名前两位的学生姓名和成绩。希望对您有帮助。
相关问题
sqlsever 查询各个学生的平均成绩
假设有以下两个表:
学生表(students):
| id | name |
| ---- | ------ |
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie|
| 4 | David |
成绩表(scores):
| id | student_id | course | score |
| ---- | ----------| ------ | ----- |
| 1 | 1 | Math | 85 |
| 2 | 1 | English| 90 |
| 3 | 2 | Math | 92 |
| 4 | 2 | English| 87 |
| 5 | 3 | Math | 78 |
| 6 | 3 | English| 80 |
| 7 | 4 | Math | 90 |
| 8 | 4 | English| 95 |
则查询各个学生的平均成绩的 SQL 语句如下:
```
SELECT students.name, AVG(scores.score) AS avg_score
FROM students
LEFT JOIN scores ON students.id = scores.student_id
GROUP BY students.name;
```
查询结果如下:
| name | avg_score |
| ------ | ---------|
| Alice | 87.5 |
| Bob | 89.5 |
| Charlie| 79 |
| David | 92.5 |
sql sever查询选修了两门以上课程的学生学号与课程数。
好的,你可以使用以下 SQL 语句来查询:
```
SELECT 选课表.学号, COUNT(*) AS 课程数
FROM 选课表
GROUP BY 选课表.学号
HAVING COUNT(*) >= 2;
```
其中,`选课表` 是你所查询的选课信息表的表名,`学号` 是你所需要的字段名。`COUNT(*)` 用于统计每个学生选择的课程数,`GROUP BY` 子句用于按照学号对结果进行分组,`HAVING` 子句中的 `COUNT(*) >= 2` 用于筛选选修了两门以上课程的学生。