CASE

  • 조건에 따라 분기
  • 다중 분기
  • 조건에 맞는 WHEN이 여러개더라도 먼저 조건이 만족하는 WHEN 처리됨
  • SELECT문에서 많이 사용됨
CASE
WHEN 조건 THEN 조건을 만족할 때 적용할 내용
ELSE 조건을 만족하지 않을 때 적용할 내용
END
Q1. buytbl에서 구매액이 1500원 이상인 사람은 최우수 고객, 1000원 이상인 사람은 우수고객, 1원 이상인 사람은 일반고객, 구매내역이 없는 고객은 유령회원으로 등급을 매기려고 한다. 회원 아이디, 이름, 총 구매액, 분류한 등급을 총 구매액이 높은 순서대로 출력하라.
select U.userID, U.name, sum(price*amount) Total_Price,
	case
    		when sum(price*amount) >= 1500 then 'VVIP'
		when sum(price*amount) >= 1000 then 'VIP'
		when sum(price*amount) >= 1 then 'Basic'
		else 'Ghost'
	end CustomerClass
from usertbl U left join buytbl B
    on B.userID = U.userID
    group by B.userID, U.name
    order by Total_Price desc;​

when 안에 별칭을 사용하면 에러가 발생, 그렇다면 별칭을 사용할 수 있는 다른 방법은?
>> 아래와 같이 서브쿼리문 사용!

select *,
	case
		when Total_Price >= 1500 then 'VVIP'
		when Total_Price >= 1000 then 'VIP'
		when Total_Price >= 1 then 'Basic'
		else 'Ghost'
	end CustomerClass
from (select U.userID, U.name, sum(price*amount) Total_Price
	from usertbl U left join buytbl B
    on B.userID = U.userID
    group by B.userID, U.name
    order by Total_Price desc)A;

>> 여기에서 A는 삽입된 서브쿼리문의 별칭, MySQL은 서브쿼리를 참조할 때 무의미한 별칭이라도 꼭 붙여줘야 함

 


Reference : 이것이 MySQL이다

'SQL' 카테고리의 다른 글

09. [SQL] 연습문제 - JOIN  (0) 2024.04.09
08. [SQL] 연습문제 - SELECT ... FROM  (0) 2024.04.08
06. [SQL] 조인  (0) 2024.04.08
05. [SQL] SELECT문  (1) 2024.04.07
04. [SQL] 테이블 외의 데이터베이스 개체의 활용  (1) 2024.04.07

+ Recent posts