mysql查询学生的总成绩并进行排名
封面图
•
2025-10-13
•
MySQL
207
0
0
0
在 MySQL 中查询学生的总成绩并进行排名,可以使用 `SUM()` 函数计算每个学生的总成绩,并使用窗口函数 `ROW_NUMBER()` 或 `RANK()` 来进行排名。 假设你有一个名为 `scores` 的表,结构如下: ```sql CREATE TABLE scores ( student_id INT, subject VARCHAR(50), score INT ); ``` ### 示例数据: | student_id | subject | score | |------------|---------|-------| | 1 | Math | 80 | | 1 | English | 90 | | 2 | Math | 70 | | 2 | English | 85 | | 3 | Math | 95 | | 3 | English | 92 | --- ## 查询每个学生的总成绩并排名 ```sql SELECT student_id, SUM(score) AS total_score, RANK() OVER (ORDER BY SUM(score) DESC) AS rank FROM scores GROUP BY student_id ORDER BY total_score DESC; ``` ### 输出示例: | student_id | total_score | rank | |------------|-------------|------| | 3 | 187 | 1 | | 1 | 170 | 2 | | 2 | 155 | 3 | --- ## 使用 `ROW_NUMBER()` 的区别 如果你希望排名是连续的(即使有相同分数也按顺序排列),可以使用 `ROW_NUMBER()`: ```sql SELECT student_id, SUM(score) AS total_score, ROW_NUMBER() OVER (ORDER BY SUM(score) DESC) AS rank FROM scores GROUP BY student_id ORDER BY total_score DESC; ``` --- ## 注意事项 - 如果有多个学生总分相同,`RANK()` 会跳过后续的排名(例如两个学生都是第1名,下一个排名是3)。 - `DENSE_RANK()` 会保持连续,不会跳过排名。 - `ROW_NUMBER()` 总是返回唯一的、连续的序号。 --- 如果你想根据具体字段或条件进行筛选,也可以加上 `WHERE` 子句。比如只查询某个班级的学生: ```sql SELECT student_id, SUM(score) AS total_score, RANK() OVER (ORDER BY SUM(score) DESC) AS rank FROM scores WHERE class = 'A' GROUP BY student_id ORDER BY total_score DESC; ``` --- 如果你提供具体的表结构和字段名称,我可以为你定制更精确的 SQL 查询。
上一篇:
mysql查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
下一篇:
mysql查询不同老师所教不同课程平均分从高到低显示
标题录入,一次不能超过6条
留言
评论