각 강의에서 그 강의 평균 점수를 넘는 수강 행만 다음 [결과]처럼 조… | [SQLD] SQL 개발자 기출유형 모의고사 1회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 1회
각 강의에서 그 강의 평균 점수를 넘는 수강 행만 다음 [결과]처럼 조회하려 한다. ( ㉠ )에 들어갈 조건으로 옳은 것은?[수강]
| 학생번호 | 강의코드 | 점수 |
|---|---|---|
| S1 | DB | 80 |
| S2 | DB | 60 |
| S3 | DB | 70 |
| S1 | OS | 90 |
| S2 | OS | 50 |
| S4 | OS | 85 |
| S3 | NW | 62 |
| S4 | NW | 58 |
SELECT A.학생번호, A.강의코드, A.점수
FROM 수강 A
WHERE A.점수 > (SELECT AVG(B.점수)
FROM 수강 B
WHERE ( ㉠ ))
ORDER BY A.강의코드, A.학생번호;[결과]
| 학생번호 | 강의코드 | 점수 |
|---|---|---|
| S1 | DB | 80 |
| S3 | NW | 62 |
| S1 | OS | 90 |
| S4 | OS | 85 |
1
B.학생번호 = A.학생번호
2
A.강의코드 IS NOT NULL
3
B.강의코드 = A.강의코드
4
B.점수 >= A.점수
해설
바깥 행의 강의코드로 서브쿼리를 묶는 연관 서브쿼리 조건
B.강의코드 = A.강의코드를 써야 행마다 그 강의의 평균과 비교한다.DB 평균 70, OS 평균 75, NW 평균 60이므로 S1(DB 80), S3(NW 62), S1(OS 90), S4(OS 85) 4행이 남고 평균과 같은 S3(DB 70)은 빠진다.
- 학생번호 로 묶으면 학생별 평균과 비교해 S2 의 DB 60 같은 행이 섞인다.
- 자기 점수 이상인 점수의 평균은 자기 점수 미만일 수 없어 결과가 0행이다.
- 바깥 열의 NULL 여부만 보면 전체 평균 69.375 와 비교하게 되어 S3 의 DB 70 이 들어온다.
오류나 개정된 내용이 보이면 알려주세요