20-3[수강] 테이블에서 과목별 점수 평균이 90 이상인 과목에 대해… | 2020년 정보처리기사실기 3회차 기출문제 상세 페이지
15
20-3
[수강] 테이블에서 과목별 점수 평균이 90 이상인 과목에 대해 과목명, 최소점수, 최대점수를 구하는 SQL 문을 작성하시오.
- GROUP BY와 HAVING을 반드시 사용하고, WHERE 절은 쓰지 않는다.
- 최소점수·최대점수는 별칭(AS)으로 지정한다.
- 대소문자는 구분하지 않으며, 끝의 세미콜론(;)은 생략해도 된다.
- 결과 행의 순서는 채점하지 않는다.
[수강]
| 과목코드 | 과목명 | 등급 | 점수 |
|---|---|---|---|
| 3100 | 자료구조 | A | 92 |
| 3200 | 네트워크 | B+ | 86 |
| 3100 | 자료구조 | B+ | 88 |
| 3300 | 보안 | A+ | 97 |
| 3200 | 네트워크 | A | 91 |
| 3300 | 보안 | B+ | 89 |
[결과]
| 과목명 | 최소점수 | 최대점수 |
|---|---|---|
| 자료구조 | 88 | 92 |
| 보안 | 89 | 97 |
해설
SELECT 과목명, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 수강 GROUP BY 과목명 HAVING AVG(점수) >= 90;
[해설]
과목명으로 묶은 뒤(GROUP BY 과목명) 그룹 단위 조건은 HAVING AVG(점수) >= 90으로 건다. WHERE는 그룹 이전 행 단위 조건이라 집계 함수를 쓸 수 없다.
- 자료구조: (92+88)/2 = 90 → 포함(이상)
- 네트워크: (86+91)/2 = 88.5 → 제외
- 보안: (97+89)/2 = 93 → 포함
각 그룹의 최솟값·최댓값은 MIN(점수) AS 최소점수, MAX(점수) AS 최대점수로 구한다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.