문제 파악
- 출력할 컬럼 : 만원 단위의 가격대 별 상품 개수 ⇒ SELECT
- 데이터를 가져올 테이블 : product ⇒ FROM
- 조회 순서 : 가격대 기준 오름차순⇒ ORDER BY
- 적용할 조건 : 만원 단위의 가격대 별로 숫자 집계 ⇒ Case when
문제 해결 과정
💡 Case when
✅ 조건에 따라 구분하고 싶을 때 사용
# + 등급 나누기
SELECT U.USERID, U.NAME, SUM(B.PRICE*B.AMOUNT) AS `TOTAL_PRICE`,
## IF 문과 같이 WHEN 조건에 순차적으로 걸리고,
# ELSE를 통해 나머지를 처리할 수 있다
CASE
# WHEN 안에 별칭을 쓰면 실행이 안된다!! 이 멍청한...SQL..
WHEN( SUM(B.PRICE*B.AMOUNT) >=1500 ) THEN 'VVIP'
WHEN( SUM(B.PRICE*B.AMOUNT) >=1000 ) THEN 'VIP'
WHEN( SUM(B.PRICE*B.AMOUNT) >0 ) THEN 'BASIC'
ELSE 'GHOST'
END AS `CUSTOMER_CLASS`
FROM BUYTBL B RIGHT JOIN USERTBL U
ON B.USERID = U.USERID
GROUP BY B.USERID, U.NAME
ORDER BY `TOTAL_PRICE` DESC;
# + 등급 나누기
SELECT U.USERID, U.NAME, SUM(B.PRICE*B.AMOUNT) AS `TOTAL_PRICE`,
## IF 문과 같이 WHEN 조건에 순차적으로 걸리고,
# ELSE를 통해 나머지를 처리할 수 있다
CASE
WHEN( `TOTAL_PRICE` >=1500 ) THEN 'VVIP'
WHEN( `TOTAL_PRICE` >=1000 ) THEN 'VIP'
WHEN( `TOTAL_PRICE` >0 ) THEN 'BASIC'
ELSE 'GHOST'
# 새로운 컬럼을 지정
END AS `CUSTOMER_CLASS`
FROM BUYTBL B RIGHT JOIN USERTBL U
ON B.USERID = U.USERID
GROUP BY B.USERID, U.NAME
ORDER BY `TOTAL_PRICE` DESC;
⚡ 주의할 점 !!
WHEN 절에 SELECT 에서 설정한 별칭을 사용하면 ⇒ UNKNOWN COLUMN 오류가 나타나면서 실행되지 않는다.
⇒ CASE~ WHEN 절은 테이블의 원천 소스를 가져오기 때문에 파생변수는 가져올 수 없다
💡 Between
✅ 범위를 지정할 때 사용
format : 컬럼명 BETWEEN A AND B
⇒ 해당 컬럼에서 A와 B 사이의 값을 조회 (A, B값을 포함)
PRICE BETWEEN 500 AND 1000
PRICE >= 500 AND PRICE <= 1000
format : 컬럼명 NOT BETWEEN A AND B
⇒ 해당 컬럼에서 해당 범위 외의 값을 조회
PRICE NOT BETWEEN 500 AND 1000
PRICE < 500 OR PRICE > 1000
문제 해결
> 완성 코드
select
case
when price between 0 and 9999 then "0"
when price between 10000 and 19999 then "10000"
when price between 20000 and 29999 then "20000"
when price between 30000 and 39999 then "30000"
when price between 40000 and 49999 then "40000"
when price between 50000 and 59999 then "50000"
when price between 60000 and 69999 then "60000"
when price between 70000 and 79999 then "70000"
when price between 80000 and 89999 then "80000"
end as `PRICE_GROUP`,
count(*) as `PRODUCTS`
from product
group by `PRICE_GROUP`
order by `PRICE_GROUP`;
'SQL > MySQL - 프로그래머스' 카테고리의 다른 글
[Lv.1] 평균 일일 대여 요금 구하기 [SELECT, ROUND] (0) | 2024.08.16 |
---|---|
[Lv.2] 자동차 평균 대여기간 구하기 [datediff, timediff, avg, round] (0) | 2024.05.06 |
[Lv.2] 재구매가 일어난 회원 리스트 [group by, having, count] (0) | 2024.05.06 |
[Lv.2] 중복 제거하기 [count, distinct] (0) | 2024.05.06 |
[Lv.2] NULL 처리하기 [ifnull, coalesce] (0) | 2024.05.06 |