본문 바로가기
DB/문제풀이

[프로그래머스] 가격대 별 상품 개수 구하기 -LV.2

by 쬑께께 2023. 1. 26.

가격대 별 상품 개수 구하기 문제는 다음과 같다.

이번 문제를 풀기 위해선

1. 가격대별 그룹 생성하기

2. 상품의 개수 구하기

3. 가격대 별 상품의 개수 구하기

4. 가격대 기준 오름차순 정렬하기

순으로 접근해야 한다.

 

 

사실 이번 문제를 풀려고 하니 당장 1번부터 막힌다...

아무리 생각해봐도 CASE WHEN 구문으로 엄청난 노가다를

하는 방법만이 생각난다...

 

 

그래서 1번은 단순히 가격만을 출력시키는 것으로 하고

PRODUCT_CODE 를 이용해 상품의 개수부터 구했다.

 

 

그런 다음 여전히 1번을 무시한 채로

가격대별 상품 갯수를 구했다.

 

 

그리고 여전히 1번을 무시한채로 

가격대 기준으로 오름차순 정렬까지 해주었다.

 

 

 

이제는 더 이상 미룰 수 없다...

1번을 풀어보도록 하겠다.

우선은 정말 노가다로 CASE WHEN 구문을 이용해 풀어 보겠다...

(하기 싫어.......!)

 

 

실행시켜보니

잘 굴러가더라......

(당연하겠지 안그랬음 내가 왜 그 고생을....)

 

 

아무튼 정답인지 확인해보니

정답이더라...

 

 

이렇게 일일이 정성스럽게 노가다로 타자를 쳐야만

풀 수 있는 문제인가에 대해 곰곰히 생각해보다가

문득, 만의 자리 숫자만 남긴채 나머지 숫자들을

다 0으로 쳐내면 되는 것 아냐....? 란 생각이 들더라.

유레카

 

 

그래서 열심히 이런 역할을 해주는 함수가 없을까 찾아봤다.

역시 나와 비슷하게 타자치기 귀찮아 하는 위대한 누군가가

만들어놨을거라고 생각했어....!!

TRUNCATE( )를 찾아냈다.

 

 

TRUNCATE는 DELETE랑 비슷하게 데이터 삭제하는 명령어 아닌가?

라고 생각했지만 찾아보니 특정 자리수 이하를 버려주는 역할도 있다고 했다.

 

 

TRUNCATE(컬럼명 또는 값, 버릴 자리 수) 의 형태로 사용이 되며

TRUNCATE(12345.12345, 2)의 결과는 12345.12

TRUNCATE(12345.12345, 1)의 결과는 12345.1

TRUNCATE(12345.12345, 0)의 결과는 12345

TRUNCATE(12345.12345, -1)의 결과는 12340

TRUNCATE(12345.12345, -2)의 결과는 12300 와 같은 형태로 

굴러간다는 걸 알 수 있었다.

 

 

 

그럼 이제 다시 1번으로 돌아가

만의 자리 숫자를 제외한 나머지를 전부 0으로 날려보겠다.

PRICE 컬럼으로 10000와 같은 형태를 만들어야 하니 

버릴 자릿수는 -4로 넣어 TRUNCATE(PRICE, -4)를 만들어 주었고

이제 이걸 CASE WHEN 구문 대신에 집어넣어주겠다.

 

 

실행시켜보면

CASE WHEN 구문을 사용했을때와 똑같은 

결괏값이 출력됨을 볼 수 있다.

 

 

정답인지도 확인해보니

정답이다....!