-- Data --/- SQL -

[ Oracle ] TRUNC() 함수를 이용한 숫자 GROUPING

녕녀기 2023. 6. 9. 14:06

본문으로

안녕하세요. 녀기입니다.

 

굉장히 오랜만에 돌아왔습니다.

 

연휴도 끼고 있고, 알바도 계속 되고 하니 포스팅이 늦어지네요...

 

( 원래 사람의 변명은 끝이 없는 법 입니다(?) )

 

SQL 코딩 테스트 연습을 하다가 난관에 부딪힌 뒤

 

다른 분의 코드를 봤는데, 제가 생각하지 못 한 접근법이라 기록을 해 놓으려고 합니다!

 

(처음에는 제 코드가 아니었지만, 시간이 지나서 익숙해지면 그것이 제꺼죠ㅋㅋㅋㅋ)

 

그럼 시작해 보시죠!


TRUNC()

ID NUMBER
0 238
1 55
2 789
3 60
4 1
5 345
6 666
7 100

위와 같은 테이블이 있습니다.

 

제가 하고 싶은 것은 100의 자리 숫자에 따라 분리하고 싶습니다.

 

예를 들면, 238은 200대의 숫자입니다. 200≤238<300 사이의 숫자이므로, 238 → 200으로 분류합니다.

 

55는 0≤55<100 이므로, 55 → 0으로 분류합니다.

 

789는 700일 것입니다.

 

 

 

여기서 TRUNC()를 사용해 봅시다.

 

TRUNC() 함수는 버림 함수입니다. 특정 자리에 위치한 값을 버린 후에 값을 출력합니다.

SELECT TRUNC(5256, -3)
FROM DUAL;

함수의 첫 번째 인자는 버려질 대상 값 입니다. 임의로 5256을 넣었습니다.

 

두 번째 인자는 버려질 자리수입니다. ' - '는 소수점 윗 자리를 나타냅니다.

 

-3 이므로 백의 자리를 나타냅니다.

 

백의 자리부터 버려지는 것이기에 52565000이 되겠죠?

 

 

 

그렇담 위 테이블을 제가 원하는 데로 출력해 봅시다.

SELECT TRUNC(NUMBER, -2)
FROM TABLE;

위 코드와 같이 'NUMBER' 컬럼에 있는 값을, 십의 자리에서 버려주면 되겠습니다.

 

그 후 GROUP BY 후 COUNT()까지 하면, 분류된 숫자의 개수도 구할 수 있겠습니다.


간단하게 작성해 봤습니다.

 

역시 공부할 때는 알았다고 생각했는데 실제로 쓰려고 할 때는 아무 것도 모르는 이 상황...ㅋㅋㅋㅋㅋ

 

아 그리고 저는 CASE를 이용해서 해 봤었는데

 

그렇게 하니까 GROUPING이 안 되더라구요ㅠㅠ

 

이유를 모르겠습니당

 

일단은 여기까지만 작성하고 그만 물러가 볼게요~~

 

뿅입니다!