一. 需求分析
我們在學習數(shù)據(jù)庫查詢時,經(jīng)常會遇到關于分組和聚合函數(shù)的查詢,比如查詢每門課程的最高分,每位同學的平均分,其實這些都是比較一般的問題。但如果遇到查詢每門課程成績的前幾名問題,就會變的很棘手,今天小編給你嘮嘮這方面的問題。
比如我們現(xiàn)在有如下三個表:學生表、科目表、成績表,分別如下:
1. 學生表(student):
2. 科目表(subject):
3. 成績表(score):
現(xiàn)在如果我們需要獲取每門科目前三名同學的姓名、學號、科目、成績等信息,這該如何查詢實現(xiàn)呢?
二. 具體實現(xiàn)
其實遇到這種問題,并不單純是在考察我們的SQL水平,同時也是在考察我們的思考能力,我們得學會思考如何進行查詢,如何進行分組,如何進行條件過濾。
1. 先連接查詢
首先我們可以根據(jù)科目和成績,來查詢同一科目中分數(shù)較高的數(shù)據(jù)。
這樣查詢到的就是一個成績記錄,同一個科目全部比他分數(shù)高的成績記錄就是被關聯(lián)查詢出來。這里為了讓第一名也查詢出來,我們可以使用外連接進行查詢。
2. 再分組過濾
然后我們可以根據(jù)學生和科目再進行分組,查詢出比這個學生該門科目高的學生成績條數(shù)是多少,如果條數(shù)小于3,這樣就得到了前三名。
如果出現(xiàn)了并列的情況,也會被查詢出來。
現(xiàn)在你可以思考一個問題,如果是讓你查詢第2到第5名同學呢?