SQL/MY SQL 문제 풀이(프로그래머스)

[MYSQL] PROGRAMMERS_가격대 별 상품 개수 구하기

SQL공부 2024. 2. 22. 00:12
반응형

SELECT truncate(PRICE,-4) as PRICE_GROUP, 
    COUNT(PRODUCT_CODE) as PRODUCTS
FROM PRODUCT
group by 1
order by 1

 

PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.

 

문제

PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성후  컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정, 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시. 결과는 가격대를 기준으로 오름차순 정렬

 

솔직히 이 문제는 어떻게 풀어야 하나 하다 case when 구문으로 구간별로 하나하나 풀려 했는데 데이터 값 구간대가 너무 많아 의도한 바가 아닌거 같아 중간에 그만두었다. 전에 데이터 업무할 때 그렇게 대량 노가다로 구간을 만들어서 한적이 있었는데 쿼리가 너무 깔끔하지 않아 다른 사람들은 어떻게 풀었나 확인해봤는데. 약간 공식과도 같이 이럴 때 사용하는 방법이 있었다.

 

Truncate 함수를 사용하는 것이다. 지정된 숫자만 남기고 절삭하는 함수이다. 이걸 몰라서.. 고민하고 있었다는게 안타까웠다. 보자마자 바로 다른사람들은 truncate(PRICE/10000,0) 한후  10000을 곱하는 이상한 행동을 하는것을 보고 truncate(PRICE,-4)로 고쳐서 작성했다.

 

나머지는 당연히 해당 구간을 만들었으니 PRICE GROUP 기준으로 그룹 후 COUNT 처리 및 정렬을 통해 값을 구해주었다.

 

실무에선 헷갈리는 함수를 검색해서 찾아낸 후 해결하면 되어서 모르는 함수가 되도록 없게 하면 좋겠지만

시험때 떠오르지 않는다면 낭패일것 같다. 남은 2일동안 문제 다 체크하면서 함수 검토도 추가로 하고 해커랭크 문제도 풀어 봐야할 것 같다.

반응형