Continuous Challenge

[불친절한 SQL 프로그래밍][6장] 단일 행 함수 - 6.2 숫자 함수 본문

Study/불친절한 SQL 프로그래밍

[불친절한 SQL 프로그래밍][6장] 단일 행 함수 - 6.2 숫자 함수

응굥 2019. 11. 22. 13:35
728x90
728x90

ROUND(number) 함수

ROUND(number) 함수는 n1을 n2자리로 반올림한다. n2가 양수면 소수부, 음수면 정수부를 반올림한다. n2의 기본값은 0이다.

ROUND(n1 [, n2])

 

TRUNC(number) 함수

TRUNC(number) 함수는 n1을 n2자리로 버린다. n2가 양수면 소수부, 음수면 정수부를 버린다. n2의 기본값은 0이다.

TRUNC(n1 [, n2])

 

MOD 함수

MOD 함수는 n1을 n2로 나눈 나머지를 반환한다. n2가 0이면 n1을 반환한다. n1이나 n2가 음수면 절대값으로 계산한 값에 n1의 부호를 적용한다.

MOD(n1, n2)

 

REMAINDER 함수

REMAINDER 함수도 n1을 n2로 나눈 나머지를 반환한다. n2가 0이면 에러가 발생한다.

REMAINDER(n1, n2)

MOD 함수와 REMAINDER 함수는 계산 공식이 상이하다.

함수 공식
MOD 함수 n1 - (n2 * FLOOR(n1/n2))
REMAINDER 함수 n1 - (n2 * ROUND(n1/n2))

 

BITAND 함수

BITAND 함수는 expr1, expr2의 비트 AND 연산 값을 반환한다. 비트 AND 연산은 비교되는 비트가 모두 1이면 1이고, 그렇지 않으면 0이다.

BITAND(expr1, expr2)

6(110)과 3(011)의 비트 AND 연산 값은 2(010)이다.

 

WIDTH_BUCKET 함수

WIDTH_BUCKET 함수는 min_value ~ max_value의 범위에 대해 num_buckets개의 버킷을 생성한 후, expr이 속한 버킷을 반환한다. 버킷은 반개구간(semi-open interval)으로 생성된다. 

WIDTH_BUCKET(expr, min_value, max_value, num_buckets)

expr이 min_value 미만이면 0, max)value이상이면 num_buckets + 1 값을 반환한다. WITH절에서 CONNECT BY 절로 6행의 순번을 생성했다. 

위 쿼리는 아래와 같은 버킷을 생성한다. [m,n)은 m이상 n미만의 구간 (expr >= n AND expr < m)을 의미한다.

C1 C2 버킷
1 0 언더플로우 버킷 : 0
2 1 1번 버킷 : [2,4)
3 1 1번 버킷
4 2 2번 버킷: [4,6)
5 2 2번 버킷
6 3 오버플로우 버킷 : num_buckets + 1

 

728x90
728x90
Comments