- 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
SELECT * FROM SC LEFT JOIN
(SELECT SId, AVG(score)ag FROM SC GROUP BY sid)r
ON SC.SId = r.SId
ORDER BY ag DESC
- 查询各科成绩最高分、最低分和平均分:
以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90
要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列
SELECT
SC.CId,
Course.Cname,
MAX(SC.score)最高分,
MIN(SC.score)最低分,
AVG(SC.score)平均分,
COUNT() 选修人数,
SUM(CASE WHEN SC.score >=60 THEN 1 ELSE 0 END)/COUNT()及格率,
SUM(CASE WHEN SC.score >=70 AND SC.score <80 THEN 1 ELSE 0 END)/COUNT(*)中等率,
SUM(CASE WHEN SC.score >=80 AND SC.score <80 THEN 1 ELSE 0 END)/COUNT(*)优良率,
SUM(CASE WHEN SC.score >=90 THEN 1 ELSE 0 END)/COUNT()优秀率
FROM SC,Course
WHERE SC.CId = Course.CId
GROUP BY SC.CId
ORDER BY COUNT() DESC,SC.CId ASC
- 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
SELECT a.cid,a.sid,a.score,COUNT(b.score)+1 rank
FROM SC a
LEFT JOIN SC b
ON a.score
ORDER BY a.cid,rank ASC;
按各科成绩进行排序,并显示排名, Score 重复时合并名次
查询学生的总成绩,并进行排名,总分重复时保留名次空缺
查询学生的总成绩,并进行排名,总分重复时不保留名次空缺
SET @crank=0;
SELECT q.sid,total,@crank:=@crank+1 rank FROM
(SELECT SC.SId,SUM(SC.score)total FROM SC
GROUP BY SC.CId
ORDER BY total DESC)q
- 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比
SELECT SC.CId,
Course.Cname,
SUM(CASE WHEN SC.score<=100 AND SC.score >85 THEN 1 ELSE 0 END)/COUNT()100’[100-85]’,
SUM(CASE WHEN SC.score<=85 AND SC.score >70 THEN 1 ELSE 0 END)/COUNT()100’[85-70]’,
SUM(CASE WHEN SC.score<=70 AND SC.score >60 THEN 1 ELSE 0 END)/COUNT()100’[70-60]’,
SUM(CASE WHEN SC.score<=60 AND SC.score >0 THEN 1 ELSE 0 END)/COUNT()100’[60-0]’
FROM SC LEFT JOIN Course
ON SC.CId = Course.CId
GROUP BY SC.CId
