https://school.programmers.co.kr/learn/courses/30/lessons/131530
[1차 코드]
특정 조건을 만족할 때 새로운 column을 만들어줘야하는 상황!
SQL에서 사용할 수 있는 조건문은 IF 조건문과 CASE 조건문이 있는데,
IF 조건문은 조건을 1개만 이용할 수 있고, CASE 조건문은 조건을 여러개 사용할 수 있다는 특징이 있다.
SELECT price,
CASE
WHEN price < 10000 THEN 0
WHEN price < 20000 THEN 10000
WHEN price < 30000 THEN 20000
WHEN price < 40000 THEN 30000
WHEN price < 50000 THEN 40000
WHEN price < 60000 THEN 50000
WHEN price < 70000 THEN 60000
WHEN price < 80000 THEN 70000
ELSE 80000
END AS price_group
FROM product
MAX(price)를 실행해봤을 떄 85000원인가? 가 최대 금액이었어서, 이런식으로 CASE 문을 작성했다.
금액대에 따라 price_group이 잘 만들어짐을 확인했다.
FROM절 서브쿼리를 이용해볼까? 하는 생각이 들었다.
SELECT product_id,
CASE
WHEN price < 10000 THEN 0
WHEN price < 20000 THEN 10000
WHEN price < 30000 THEN 20000
WHEN price < 40000 THEN 30000
WHEN price < 50000 THEN 40000
WHEN price < 60000 THEN 50000
WHEN price < 70000 THEN 60000
WHEN price < 80000 THEN 70000
ELSE 80000
END AS price_group
FROM product
이렇게 하면 product id와 해당 product가 속한 price_group을 뽑을 수 있다.
FROM절 서브쿼리를 이용하면 서브쿼리 결과물을 테이블처럼 활용할 수 있는데,
이때 AS로 이름을 붙여주는 것이 필요하다.
SELECT price_group,
COUNT(*) AS products
FROM(SELECT product_id,
CASE
WHEN price < 10000 THEN 0
WHEN price < 20000 THEN 10000
WHEN price < 30000 THEN 20000
WHEN price < 40000 THEN 30000
WHEN price < 50000 THEN 40000
WHEN price < 60000 THEN 50000
WHEN price < 70000 THEN 60000
WHEN price < 80000 THEN 70000
ELSE 80000
END AS price_group
FROM product) AS grp
GROUP BY price_group
ORDER BY price_group
price_group 별로 갯수를 세야하므로 GROUP BY와 COUNT 함수를 같이 사용해주었다.
이렇게 풀면 답은 나온다.
하지만 CASE 문에 복붙 여러개 한게 효율적이지 못한것같아 다른 풀이를 찾아보았다.
[모범 답안]
price의 만원 단위를 활용하여 price_group 이라는 column을 만들어줄 수 있다.
자릿수에 TRUNCATE() 함수를 이용해 천의 자릿수 이하를 모두 버림해주면 된다.
TRUNCATE(숫자, 버릴 자릿수) : 숫자를 버릴 자릿수 아래로 버림
버릴 자릿수가 음수 --> 정숫값에 대해 버릴 자릿수를 작은 자릿수부터 세는 방식
버릴 자릿수가 양수 --> 소숫값에 대해 남길 자릿수를 앞에서부터 세는 방식
ex) TRUNCATE(1234.5678, -1) --> 1230
ex) TRUNCATE(1234.5678, 1) --> 1234.5
SELECT TRUNCATE(price, -4) AS price_group,
COUNT(*) AS products
FROM product
GROUP BY price_group
ORDER BY price_group
'SQL > 문제풀이' 카테고리의 다른 글
[프로그래머스] 동명 동물 수 찾기 (0) | 2023.12.27 |
---|---|
[프로그래머스] 입양 시각 구하기 (1) (0) | 2023.12.26 |
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.12.26 |
[프로그래머스] 상위 n개 레코드 (0) | 2023.12.22 |
[프로그래머스] 어린 동물 찾기 (0) | 2023.12.22 |