SQL 經典題型解答(5)
阿新 • • 發佈:2018-09-13
如果 ref 功能 tween avg des name each 知識
SQL 經典題型解答(5)
@(數據庫)
20、查詢學生的總成績並進行排名
SELECT
a.s,
a.Sname,
SUM( b.score ) AS sumscore,
RANK() OVER (ORDER BY SUM( b.score ) DESC) AS ‘名次‘
FROM
student a,
sc b
WHERE
a.s = b.S
GROUP BY
a.S,a.Sname
詳解:
沒有用到新的知識。
程序運行結果:
21、查詢不同老師所教不同課程平均分從高到低顯示
SELECT a.C, a.Cname, c.Tname, avg( b.score ) AS avgscore FROM course a, sc b, teacher C WHERE a.C = b.C AND a.T = c.T GROUP BY a.c, a.Cname, c.Tname ORDER BY avgscore DESC
程序運行結果:
22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績
SELECT a.*, b.c, b.score FROM student a, ( SELECT * FROM ( SELECT s, c, score, ROW_NUMBER ( ) OVER ( ORDER BY score DESC ) AS mc FROM sc WHERE C = ‘01‘ ) a WHERE mc BETWEEN 2 AND 3 UNION ALL SELECT * FROM ( SELECT s, c, score, ROW_NUMBER ( ) OVER ( ORDER BY score DESC ) AS mc FROM sc WHERE C = ‘02‘ ) b WHERE mc BETWEEN 2 AND 3 UNION ALL SELECT * FROM ( SELECT s, c, score, ROW_NUMBER ( ) OVER ( ORDER BY score DESC ) AS mc FROM sc WHERE C = ‘03‘ ) c WHERE mc BETWEEN 2 AND 3 ) b WHERE a.s = b.s ORDER BY c
詳解;
通過查詢表 sc 可以根據每一個課程的成績生成表格。然後查出排名在 2 和 3 之間的學生的學號、課程、以及課程成績,在聯合表 stuedent 得到血色和功能的信息。
由於課程較少,可以采用這種方法,但是如果課程數多就不可以,應該采用 SQL 循環,
如果題目要求中沒有聲明選取課程幾,代碼中就不應該出現 ’01‘,’02‘,’03’ 這樣的課程。
SQL UNION 操作符用法
程序運行結果:
SQL 經典題型解答(5)