문제
다음 성적 테이블에서 과목별 점수의 평균이 90점 이상인 '과목이름', '최소점수', '최대점수'를 검색하고자 한다. [조건]을 참고하여 적합한 SQL문을 작성하시오.
[성적]
| 순번 | 과목이름 | 점수 |
|---|---|---|
| 1 | 데이터베이스 | 89 |
| 2 | 데이터베이스 | 92 |
| 3 | 네트워크 | 88 |
| 4 | 소프트웨어 | 91 |
| 5 | 네트워크 | 89 |
| 6 | 소프트웨어 | 85 |
[결과]
| 과목이름 | 최소점수 | 최대점수 |
|---|---|---|
| 데이터베이스 | 89 | 92 |
[조건]
- WHERE를 사용하지 말아야 한다.
- SELECT절에 별칭을 사용하여 작성해야 한다.
- SQL 구문 마지막에 세미콜론 생략 가능하다.
- 반드시 GROUP BY와 HAVING을 사용해야 한다.
- 집계함수를 사용해야 한다.
정답
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 한 뒤 그룹별 조건은 HAVING 으로 거른다. MIN(점수), MAX(점수) 집계함수로 최소/최대 점수를 구하고 별칭을 붙이며, 평균 90 이상 조건은 HAVING AVG(점수) >= 90 으로 작성한다. WHERE 는 그룹 조건에 쓸 수 없으므로 사용하지 않는다.