성적 테이블(윗쪽 그림)에 대해 아래쪽 그림과 같은 실행 결과를 얻기 … | [컴퓨터활용능력 1급 필기] 10년 3회차 기출문제 상세 페이지
1[컴퓨터활용능력 1급 필기] 10년 3회차
성적 테이블(윗쪽 그림)에 대해 아래쪽 그림과 같은 실행 결과를 얻기 위한 SQL 질의문으로 옳은 것은?성적 : 테이블
| 학번 | 학과 | 점수 |
|---|---|---|
| 100 | 멀티 | 100 |
| 200 | 인터넷 | 88 |
| 300 | 인터넷 | 92 |
| 400 | 멀티 | 80 |
| 500 | 멀티 | 90 |
| 600 | 전산 | 78 |
| 700 | 간호 | 99 |
| 800 | 인터넷 | 57 |
| 900 | 간호 | 65 |
| 1000 | 유아 | 78 |
학과별평균
| 학과 | 점수평균 |
|---|---|
| 간호 | 82 |
| 멀티 | 90 |
| 인터넷 | 79 |
1
SELECT 학과, Avg(점수) AS 점수평균 FROM 성적 GROUP BY 학과 WHERE Count(*)>=2
2
SELECT 학과, Avg(점수) AS 점수평균 FROM 성적 GROUP BY 학과 HAVING Count(*)>=2
3
SELECT 학과, Avg(점수) AS 점수평균 FROM 성적 GROUP BY 점수 WHERE Count(*)>=2
4
SELECT 학과, Avg(점수) AS 점수평균 FROM 성적 GROUP BY 점수 HAVING Count(*)>=2
해설
실행 결과 창에는 간호 82, 멀티 90, 인터넷 79 세 학과만 점수평균과 함께 나타난다. 성적 테이블의 인원은 멀티 3명(100·80·90), 인터넷 3명(88·92·57), 간호 2명(99·65), 전산 1명(78), 유아 1명(78)이므로, 소속 인원이 2명 이상인 학과만 남긴 결과임을 알 수 있다.
따라서 GROUP BY 학과로 학과별로 묶어 Avg(점수)를 계산한 뒤, 묶인 그룹에 대한 조건인 '개수 2 이상'을 HAVING Count(*)>=2로 지정해야 한다. 실제로 계산하면 (99+65)/2=82, (100+80+90)/3=90, (88+92+57)/3=79로 결과 창의 값과 정확히 맞아떨어진다.
WHERE절은 그룹으로 묶기 전 개별 레코드에 적용되는 조건이라 Count 같은 집계 함수를 조건으로 쓸 수 없고, 그룹 기준을 학과가 아니라 점수로 잡으면 같은 점수끼리 묶여 학과별 평균이라는 결과 자체가 나오지 않는다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.