SQL查询 -- -- 19、按各科成绩进行排序,并显示排名
时间: 2023-09-15 21:24:38 浏览: 138
为了按各科成绩进行排序并显示排名,你可以使用以下SQL查询语句:
```sql
SELECT
student_name,
subject,
score,
FIND_IN_SET(score, (SELECT GROUP_CONCAT(DISTINCT score ORDER BY score DESC) FROM scores WHERE subject = '科目名')) AS rank
FROM
scores
WHERE
subject = '科目名'
ORDER BY
score DESC;
```
请将上述查询中的 `'科目名'` 替换为你想要排序的具体科目名称。这个查询将返回学生姓名、科目、分数和排名,按照分数从高到低排序。
注意:这个查询假设每个学生在每个科目上有唯一的分数。如果有多个学生在同一科目上有相同的分数,它们将会得到相同的排名。
相关问题
sql 按各科平均成绩进行排序,并显示排名
可以使用以下 SQL 语句来实现:
```
SELECT subject, AVG(score) as avg_score, RANK() OVER (ORDER BY AVG(score) DESC) as ranking
FROM score
GROUP BY subject
ORDER BY avg_score DESC;
```
其中,`score` 表是成绩表,包含字段 `subject` 和 `score`,分别表示科目和成绩。`AVG(score)` 表示对每个科目的成绩求平均值,`RANK() OVER (ORDER BY AVG(score) DESC)` 表示按平均成绩降序排名,`ranking`是排名字段的别名。最后,使用 `ORDER BY avg_score DESC` 对结果按平均成绩降序排序。
【sql:练习题15】按各科成绩进行排序,并显示排名
假设有一个成绩单表格 students,包含以下字段:
- id:学生ID
- name:学生姓名
- math_score:数学成绩
- english_score:英语成绩
- chinese_score:语文成绩
则可以使用以下 SQL 语句实现按各科成绩进行排序,并显示排名:
```
SELECT
s.id,
s.name,
s.math_score,
s.english_score,
s.chinese_score,
(SELECT COUNT(*) FROM students WHERE math_score > s.math_score) + 1 AS math_rank,
(SELECT COUNT(*) FROM students WHERE english_score > s.english_score) + 1 AS english_rank,
(SELECT COUNT(*) FROM students WHERE chinese_score > s.chinese_score) + 1 AS chinese_rank
FROM
students s
ORDER BY
math_score DESC, english_score DESC, chinese_score DESC;
```
这里使用了子查询来计算每个学生在各科成绩中的排名。在子查询中,使用 COUNT(*) 统计比当前学生成绩高的学生数量,然后加上 1 得到排名。最后按照各科成绩的降序排列,即可得到按各科成绩进行排序,并显示排名的结果。