[SQL ] 同一列的資料用AVG平均

看板Database (資料庫)作者 (猛獲)時間4年前 (2020/09/28 04:00), 4年前編輯推噓2(206)
留言8則, 5人參與, 4年前最新討論串1/1
內容/問題描述: 108 年 - 高雄市高中教師聯招甄選-資料處理科 考試題目 有兩個資料表 STUDENT(SID,NAME,SEX,AGE,HEIGHT) SCORE(SID,CHI,ENG,MATH) 題目要求列出資料欄位 SID、NAME、AVG 及其欄位紀錄, 篩選條件:平均成績(AVG)為國文(CHI)、英文(ENG)、數學(MATH) 三科成績的平均數值(需使用 AVG 函數),平均成績(AVG)數值應大 於 70 分。 小弟我一開始沒看清楚題目有要求用AVG函數 SELECT STUDENT.SID, STUDENT.NAME, (SCORE.CHI+SCORE.ENG+SCORE.MATH)/3 AS AVG FROM STUDENT,SCORE WHERE STUDENT.SID = SCORE.SID AND (SCORE.CHI+SCORE.ENG+SCORE.MATH)/3 > 70 ; 看清楚題目要求後,不知道該怎麼用AVG函數來寫 SELECT STUDENT.SID, STUDENT.NAME, AVG(SCORE.CHI+SCORE.ENG+SCORE.MATH) AS AVG FROM STUDENT,SCORE WHERE STUDENT.SID = SCORE.SID GROUP BY STUDENT.SID, STUDENT.NAME HAVING AVG(SCORE.CHI+SCORE.ENG+SCORE.MATH) > 70 ; 這樣寫出來的結果是該學生的三科成績相加... 請各位高手指導 感恩感謝 2020.10.01 更新 SELECT A.SID,ST.NAME,AVG(A.SS) AS 'AVG' FROM ( SELECT SID,CHI AS SS FROM SCORE UNION SELECT SID,ENG AS SS FROM SCORE UNION SELECT SID,MATH AS SS FROM SCORE ) AS A , STUDENT AS ST WHERE A.SID=ST.SID GROUP BY A.SID,ST.NAME HAVING AVG(A.SS)>70 ; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.254.194.210 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1601236822.A.6F9.html

09/28 13:23, 4年前 , 1F
把三個成績弄在同一個欄位,再試試看AVG
09/28 13:23, 1F

09/28 23:37, 4年前 , 2F
Having
09/28 23:37, 2F

09/28 23:48, 4年前 , 3F
Avg(ch)+Avg(math)+....看看吧
09/28 23:48, 3F

09/28 23:48, 4年前 , 4F
或者avg(sum())
09/28 23:48, 4F

09/29 08:21, 4年前 , 5F
有試過,執行出現聚合函數內不能再有聚合函數。
09/29 08:21, 5F

09/29 11:27, 4年前 , 6F

09/30 17:13, 4年前 , 7F
把國英數欄位拆成三個表,做union讓他變成都在一個欄位,
09/30 17:13, 7F

09/30 17:13, 4年前 , 8F
然後再用group by avg
09/30 17:13, 8F
※ 編輯: wwfroaddogg (111.254.196.122 臺灣), 10/01/2020 15:45:43
文章代碼(AID): #1VSEzMRv (Database)
文章代碼(AID): #1VSEzMRv (Database)