다음 SQL 의 실행 결과로 옳은 것은?[모의평가]학생회차점수민준170… | [SQLD] SQL 개발자 기출유형 모의고사 7회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 7회
다음 SQL 의 실행 결과로 옳은 것은?[모의평가]
| 학생 | 회차 | 점수 |
|---|---|---|
| 민준 | 1 | 70 |
| 민준 | 2 | 85 |
| 민준 | 3 | 80 |
| 서연 | 1 | 90 |
| 서연 | 2 | 95 |
SELECT 학생, 회차,
FIRST_VALUE(점수) OVER (PARTITION BY 학생 ORDER BY 회차
ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS A,
LAST_VALUE(점수) OVER (PARTITION BY 학생 ORDER BY 회차
ROWS BETWEEN CURRENT ROW AND 1 FOLLOWING) AS B
FROM 모의평가
ORDER BY 학생, 회차;1
| 학생 | 회차 | A | B |
|---|---|---|---|
| 민준 | 1 | 70 | 85 |
| 민준 | 2 | 70 | 80 |
| 민준 | 3 | 70 | 80 |
| 서연 | 1 | 90 | 95 |
| 서연 | 2 | 90 | 95 |
2
| 학생 | 회차 | A | B |
|---|---|---|---|
| 민준 | 1 | (null) | 85 |
| 민준 | 2 | 70 | 80 |
| 민준 | 3 | 85 | 80 |
| 서연 | 1 | (null) | 95 |
| 서연 | 2 | 90 | 95 |
3
| 학생 | 회차 | A | B |
|---|---|---|---|
| 민준 | 1 | 70 | 85 |
| 민준 | 2 | 70 | 80 |
| 민준 | 3 | 85 | (null) |
| 서연 | 1 | 90 | 95 |
| 서연 | 2 | 90 | (null) |
4
| 학생 | 회차 | A | B |
|---|---|---|---|
| 민준 | 1 | 70 | 85 |
| 민준 | 2 | 70 | 80 |
| 민준 | 3 | 85 | 80 |
| 서연 | 1 | 90 | 95 |
| 서연 | 2 | 90 | 95 |
해설
A 는 직전 행~현재 행 프레임의 첫 값, B 는 현재 행~다음 행 프레임의 끝 값이므로 민준 3회차는 A=85·B=80 이 된다.
파티션 첫 행은 프레임에 자기 자신만 있어 A 가 자기 점수이고, 마지막 행도 B 가 자기 점수라서 NULL 이 생기지 않는다.
- 첫 행 A 가 NULL 인 표는 FIRST_VALUE 를 LAG 처럼 본 결과이다.
- 마지막 행 B 가 NULL 인 표는 LAST_VALUE 를 LEAD 처럼 본 결과이다.
- 민준 3회차 A 가 70 인 표는 프레임을 무시하고 파티션 첫 값을 쓴 결과이다.
오류나 개정된 내용이 보이면 알려주세요