[ Oracle ] TRUNC() 함수를 이용한 숫자 GROUPING
본문으로
안녕하세요. 녀기입니다.
굉장히 오랜만에 돌아왔습니다.
연휴도 끼고 있고, 알바도 계속 되고 하니 포스팅이 늦어지네요...
( 원래 사람의 변명은 끝이 없는 법 입니다(?) )
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 이므로 백의 자리를 나타냅니다.
백의 자리부터 버려지는 것이기에 5256은 5000이 되겠죠?
그렇담 위 테이블을 제가 원하는 데로 출력해 봅시다.
SELECT TRUNC(NUMBER, -2)
FROM TABLE;
위 코드와 같이 'NUMBER' 컬럼에 있는 값을, 십의 자리에서 버려주면 되겠습니다.
그 후 GROUP BY 후 COUNT()까지 하면, 분류된 숫자의 개수도 구할 수 있겠습니다.
간단하게 작성해 봤습니다.
역시 공부할 때는 알았다고 생각했는데 실제로 쓰려고 할 때는 아무 것도 모르는 이 상황...ㅋㅋㅋㅋㅋ
아 그리고 저는 CASE를 이용해서 해 봤었는데
그렇게 하니까 GROUPING이 안 되더라구요ㅠㅠ
이유를 모르겠습니당
일단은 여기까지만 작성하고 그만 물러가 볼게요~~
뿅입니다!
