참고 동영상
문제풀이
⭐ 확장 GROUP BY(GROUPING_ID)
- 2진수
- 정답
㉠에 들어갈 답은 GROUPING_ID( C2, C1 ) 이다.
분석함수 ( PARTITION BY ~ )
- C1은 LAST_VALUE를 통해 SAL의 맨 마지막 값을 출력.
- JOB 기준으로 파티션 나눔.
- WINDOWS 함수
- UNBOUNDED는 첫번째 값을 지정하는 것이다.
- WINDOWING는 시작점과 끝나는 점이 있어야 한다. 그렇기 때문에 ①번과 ②번은 무조건 틀렸다고 보면 된다.
- ③번 풀이
- 구문이 풀이하자면 첫번째 범위 부터 현재 범위이다.
- ④번 풀이
- 현재 행부터 해당 파티션의 끝까지라는 뜻이다.
- CLERK 파티션의 SAL 컬럼 마지막 값은 1100이기 때문에 SMITH의 C1 값은 1100이 나온다.
- 정답
㉠에 들어갈 답은 4번이다.
순위함수 ( RANK )
- RANK
- 1, 2, 2, 4, 5, 6 순서로 나온다.
- 동일한 값이면 중복 순위를 부여하고, 다음 순위는 해당 개수만큼 건너뛰고 반환
- DENSE_RANK
- 1, 2, 2, 3, 4, 5 순서로 나온다.
- 동일한 값이면 중복 순위를 부여하고, 다음 순위는 중복 순위와 상관없이 순차적으로 반환
- ROW_NUMBER
- 중복 관계없이 순차적으로 순위를 반환
- 정답
2번 DENSE_RANK이다.
분석함수
- SAL의 평균값을 구한다.
- 파티션은 없기 때문에 전체에 대한 평균을 구한다.
- 단, 조건은 내가 읽은 로우 기준으로 한줄 위에부터 한줄 다음까지이다.
- 정답
4번 3000이다.
NTILE(n)
ROW 건수 기준으로 최대한 n개 그룹으로 묶는 것
#2일때 #3일때 #4일때
A 1 1 1
A 1 1 1
B 1 2 2
B 2 2 3
C 2 3 4
- 서브쿼리에 있는 조건에 DEPTNO = 20인 점을 확인할 수 있다.
- NTILE(2)의 뜻은 최대한 2개의 그룹으로 평등하게 나눈다는 뜻이다.
- 정답
㉠ 3, ㉡ 2
계층쿼리
- START WITH ENAME = ‘JONES’ ⇒ 첫 스타트 끊을 시작점
- CONNECT BY MGR = PRIOR EMPNO; ⇒ 결과가 안나올 때 까지 재귀호출하는 것
- 위의 코드를 해석하자면, 내가 읽은 MGR하고 내가 이전에 읽은 EMPNO가 같으면 CONNET 진행해라이다.
- EMPNO와 MGR이 연결되면 CONNECT 한다.
- 만약, CONNECT할 MGR이 없다면 거시서 STOP!
- 근데! FORD는 EMPNO의 번호가 7566과 연결됨. JONES의 EMPNO을 가져와서 CONNECT를 진행 함
- 정답
제일 높은 LEVEL을 출력하는 것이기 때문에 3번이 정답이다.
계층쿼리
- CONNECT_BY_ISLEAF = 1 ⇒ 자식이 없으면 1을 주고, 자식이 없으면 0을 준다.
마치며
SQL은 역시 어렵다..😂 ORACLE이 함수가 많다는 소리는 들었지만 이렇게 다양한 함수가 있는 줄 몰랐다. SQLD 자격증 시험을 준비하면서 문제를 통해 다양한 쿼리문을 접해보았다. 공부한 내용을 통해 다른 사람이 만든 쿼리문을 읽을 수 있는 사람이 되면 좋겠다🙂!
'💡문제 풀이 > SQLD' 카테고리의 다른 글
[SQLD] 52회 SQLD(SQL 개발자) 합격 후기 (2) | 2024.06.19 |
---|---|
[SQLD] 45회 ~ 50회 기출문제 (1) | 2024.03.11 |
[DB,SQLD] SQLD 시험 예비공부 (0) | 2024.03.11 |