1. 程式人生 > >SQL 經典題型解答(5)

SQL 經典題型解答(5)

如果 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)