学生表(t_students)有字段:学生id(SID),姓名(SNAME),成绩表(t_scores)有字段:成绩id(SCID),课程id(CID)学生id(SID)分数(SC_VAL),课程表(t_corses)有字段:课程id(CID),课程名(CNAME),要求写出查询每个学生的总分数,排名的SQL,结果列为学生id,姓名,总分数,排名
时间: 2024-01-05 08:03:28 浏览: 131
学生所修的和课程和成绩显示表
好的,以下是查询每个学生的总分数,排名的SQL语句:
```
SELECT t_students.SID, t_students.SNAME, SUM(t_scores.SC_VAL) AS total_score,
(SELECT COUNT(DISTINCT total_scores.total_score)
FROM (SELECT SUM(SC_VAL) AS total_score
FROM t_scores GROUP BY SID) AS total_scores
WHERE total_scores.total_score >= SUM(t_scores.SC_VAL)) AS rank
FROM t_students
JOIN t_scores ON t_students.SID = t_scores.SID
GROUP BY t_students.SID, t_students.SNAME
ORDER BY total_score DESC;
```
解释一下这个SQL语句:
1. 首先使用了三张表的 JOIN 操作,将学生表、成绩表、课程表关联起来。
2. 使用了 SUM 函数计算每个学生的总分数,并在 SELECT 语句中给这个总分数起了个别名 total_score。
3. 在 SELECT 语句中使用了子查询,使用 COUNT 函数计算每个学生的排名。子查询中先计算出每个学生的总分数(使用了内部的 GROUP BY 语句),然后对这些总分数去重计算数量,就可以得到总分数排名。
4. 最后按照总分数降序排序,得到每个学生的总分数和排名。
希望对你有所帮助!
阅读全文