作者wwfroaddogg (猛获)
看板Database
标题[SQL ] 同一列的资料用AVG平均
时间Mon Sep 28 04:00:20 2020
内容/问题描述:
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://webptt.com/cn.aspx?n=bbs/Database/M.1601236822.A.6F9.html
1F:推 criky: 把三个成绩弄在同一个栏位,再试试看AVG 09/28 13:23
2F:→ MOONY135: Having 09/28 23:37
3F:→ MOONY135: Avg(ch)+Avg(math)+....看看吧 09/28 23:48
4F:→ MOONY135: 或者avg(sum()) 09/28 23:48
5F:→ wwfroaddogg: 有试过,执行出现聚合函数内不能再有聚合函数。 09/29 08:21
7F:→ tedcat: 把国英数栏位拆成三个表,做union让他变成都在一个栏位, 09/30 17:13
8F:→ tedcat: 然後再用group by avg 09/30 17:13
※ 编辑: wwfroaddogg (111.254.196.122 台湾), 10/01/2020 15:45:43