문제
다음 조건을 만족하면서, 과목별 점수의 평균이 90이상인 과목이름, 최소점수, 최대점수를 구하는 SQL문을 작성하시오.
- 대소문자를 구분하지 않는다.
- WHERE 구문을 사용하지 않는다.
- GROUP BY, HAVING 구문을 반드시 사용한다.
- 세미콜론(;)은 생략 가능하다.
- 별칭(AS)을 사용해야 한다.
[성적]
| 과목코드 | 과목이름 | 학점 | 점수 |
|---|---|---|---|
| 1000 | 컴퓨터과학 | A+ | 95 |
| 2000 | 운영체제 | B+ | 85 |
| 1000 | 컴퓨터과학 | B+ | 85 |
| 2000 | 운영체제 | B | 80 |
[결과]
| 과목이름 | 최소점수 | 최대점수 |
|---|---|---|
| 컴퓨터과학 | 85 | 95 |
정답
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90SELECT 과목이름, MIN(점수) AS 최소점수, MAX(점수) AS 최대점수 FROM 성적 GROUP BY 과목이름 HAVING AVG(점수) >= 90;
해설
과목이름으로 그룹화(GROUP BY)한 뒤, 그룹별 집계 조건은 WHERE가 아닌 HAVING 절로 지정한다. HAVING AVG(점수) >= 90으로 평균이 90 이상인 과목만 남기고, MIN·MAX 집계함수에 AS 별칭을 붙여 최소점수·최대점수를 출력한다. 컴퓨터과학의 평균은 (95+85)/2=90이므로 결과에 포함된다.