Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

거인의 코딩일지

[SQLD] 오답정리(SQL 활용) 본문

자격증/SQLD

[SQLD] 오답정리(SQL 활용)

코딩거인 2024. 5. 26. 15:19
728x90

다음 결과를 도출하기 위해 SQL 빈칸에 들어갈 함수로 가장 적절한 것은 무엇인가??

[SQL]

SELECT EMP_ID, NAME, SAL, (            ) OVER (ORDER BY DESC) AS RANK;

[결과]

EMP_ID NAME SAL RANK
103 Dennis 90000 1
104 Tom 65000 2
105 Bruce 49000 3
106 Yoon 49000 3
107 Kim 20000 4
  1. ROW_NUMBER( )
  2. RANK ( )
  3. DENSE_RANK( )
  4. ROWNUM( )
  • 3번
  • DENSE_RANK() 함수는 순위를 매기면서 같은 순위가 존재하더라도 다음순위를 건너뛰지 않고 이어서 매긴다.
  • RANK() 함수는 순위를 매기면서 같은 순위가 존재하면 존재하는 수 만큼 다음 순위를 건너뛴다.
  • ROW_NUMBER 함수는 순위를 매기면서 동일한 값이라도 각기 다른 순위를 부여한다.
  • ROWNUM() 함수는 Oracle에서 행의 순번을 매기는 슈도 컬럼 이다.

다음은 그룹함수에 대한 설명이다. 가장 적절하지 않은 것은 무엇인가?
  1. ROLLUP 함수느느 인자로 주어진 컬럼의 순서에 따라 결과가 달라지므로 작성시 유의해야한다.
  2. CUBE 함수는 인자로 주어진 컬럼의 순서에 따라 결과가 달라지므로 작성시 유의해야한다.
  3. CUBE 함수는 ROLLUP 함수에 비해 시스템에 많은 부하를 발생시키므로 주의해서 사용해야한다.
  4. GROUP BY 와 UNION ALL 을 이용하여 GROUPING SETS 함수와 동일한 결과를 출력하도록 SQL 작성이 가능하다.
  • 2번
  • CUBE 함수는 인자로 주어진 컬럼들의 모든 조합에 대해 집계를 수행하므로 인자의 순서가 바뀌더라도 결과 데이터는 동일하다.

다음 결과를 도출하기 위해 SQL 빈칸에 들어갈 함수로 가장 적절한 것은 무엇인가?

[SQL]

SELECT ORDER_DATE, ORDER_CNT, (          ) AS SUM FROM TORDER;

[결과]

ORDER_DATE ORDER_CNT SUM
2024-08-01 10 22
2024-08-02 12 28
2024-08-03 6 26
2024-08-04 8 24
2024-08-05
10 18
  1. SUM(ORDER_CNT) OVER (ORDER BY ORDER_DATE)
  2. SUM(ORDER_CNT) OVER (ORDER BY ORDER_DATE ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
  3. SUM(ORDER_CNT) OVER (ORDER BY ORDER_DATE ROWS BETWEEN CURRENT ROW AND UNBONDED FOLLOWING)
  4. SUM(ORDER_CNT) OVER (ORDER BY ORDR_DATE ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
  • 4번
  • 이 문제는 집계 데이터의 범위를 정하는 WINDOWING 절에 대한 문제 이다.
UNBOUNDED PRECEDING 위 쪽 끝 행
UNBOUNDED FOLLOWING 아래쪽 끝 행
CURRENT ROW 현재 행
n PRECEDING 현재 행에서 위로 n 만큼 이동
n FOLLOWING 현재 행에서 아래로 n 만큼 이동
  • 4번 결과 데이터를 보면 바로 위의 행과 현재 행, 그리고 바로 아래 행의 ORDER_CNT 를 합한 데이터가 SUM 컬럼의 데이터임을 알 수 있다.
  • 1, 2 번 동일한 의미로 맨 위의 행부터 현재 행까지의 누적치가 반환 된다.
    • ROWBETWEEN UNBOUNDED PRECEDING AND CURRENT ROW가 Default
ORDER_DATE ORDER_CNT SUM
2024-08-01 10 10
2024-08-02 12 22
2024-08-03 6 28
2024-08-04 8 36
2024-08-05
10 46
  • 3번 맨 아래 행부터 현재 행 까지의 누적치가 반환된다.
ORDER_DATE ORDER_CNT SUM
2024-08-01 10 46
2024-08-02 12 36
2024-08-03 6 24
2024-08-04 8 18
2024-08-05
10 10

다음 중 에러가 발생할 수 있는 SQL은 무엇인가???

[SAMPLE1 테이블]

COL 1 COL 2
A 1
B 2
C 3

[SAMPLE2 테이블]

COL 1 COL 2
A 4
C 5
  1. SELECT * FROM SAMPLE1 A WHERE EXISTS (SELECT 'X' FROM SAMPLE2 B WHERE B.COL1 = A.COL1);
  2. SELECT * FROM SAMPLE1 WHERE COL1 IN (SELECT COL1 FROM SAMPLE2);
  3. SELECT * FROM SAMPLE1 WHERE COL1 = (SELECT COL1 FROM SAMPLE2);
  4. SELECT * FROM SAMPLE1 WHERE COL1 = (SELECT COL1 FROM SAMPLE2 WHERE ROWNUM = 1);
  • 3번
  • (SELECT COL1 FROM SAMPLE2) 은 다중 행 서브쿼리로 '=' 과 함께 쓰일 수 없다.
    4번의 경우 ROWNUM 조건절로 인해 단일 행 서브쿼리가 되어 '=' 조건과 함께 쓰여도 무방하다.

 

728x90