編程萌新,因為遇到這麼個SQL 查詢的問題:在一張表A里有如下欄位:學生姓名、學科名、學科成績。寫一條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個多小時,可能資質不行,但是會繼續努力。從簡單入手,從萌新出發~