SQL 查詢:查詢學生平均成績


  編程萌新,因為遇到這么個SQL 查詢的問題:在一張表A里有如下字段:學生姓名、學科名、學科成績。寫一條SQL 語句查出各科平均成績並按學生姓名分組,按如下格式顯示:學生姓名|語文|數學|英語。一開始遇到的時候挺懵的,有印象但是卻忘了怎么寫了,接下來就是查閱資料並親自上手測試是否可行~

  第一次代碼修修改改如下,此時還是在只用一張表來查詢(無法實現上述目標結果,貼圖只是為了說明下思考路線):

    

 1 select UName,
 2 (select AVG(Grades) from UserInfo where GName = '語文') as '語文',
 3 (select AVG(Grades) from UserInfo where GName = '數學') as '數學',
 4 (select AVG(Grades) from UserInfo where GName = '英語') as '英語' 
 5 from UserInfo
 6 where UName = '小明'
 7 group by UName
 8 /*having GName = '語文' and GName = '數學' and GName = '英語'*/
 9 order by AVG(Grades)
10 go

 

  然后查閱資料也沒有頭緒,就想只用一張表是否真的可行,要不用兩張表試一下?接下來就是在原表A(實際為如下代碼中 UserInfo表)基礎上插入一個 學生id 的字段,然后新建一張學生表(T_User),擁有兩個字段:id、姓名,學生表的id匹配表A里的學生id,查詢語句通過連接實現(因為是思考一個問題,就不考慮內外或者交叉連接的問題了),代碼如下:

1 select UName,
2 (select AVG(Grades) from UserInfo where GName = '語文' and UName = tu.name) as '語文',
3 (select AVG(Grades) from UserInfo where GName = '數學' and UName = tu.name) as '數學',
4 (select AVG(Grades) from UserInfo where GName = '英語' and UName = tu.name) as '英語' 
5  from UserInfo as ui join T_User as tu
6  on ui.UName = tu.name
7 group by ui.UName,tu.name
8 go

 

  運行測試如下:

  成功!研究並解決差不多花了1個多小時,可能資質不行,但是會繼續努力。從簡單入手,從萌新出發~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM