본문 바로가기
MYSQL

MYSQL - CASE문 작성법, if( ) 사용법

by 하니__ 2024. 5. 14.
출판년도가 2000년 이상인 책들은 '최신책' 이라하고
그렇지 않은 책들은 '예전책'이라고 하여
type 컬럼을 만들자

라는 지문이 있을때
 
이것을 case문을 모를때는

select *, released_year as type
from books
where replace(type,'type >=2000' , '최신책') and
	 replace(type,'type <2000' , '예전책');

 
라고 입력하고
 
에러를 경험하면서
왜 안되지? 를 생각했다
하지만 방법이 틀린거였다
 

select *,
	case
		when released_year >=2000 then '최신책'
		else '예전책'
	end as type
from books;

라고 적어줘야 하며
 
새로 만들어지는 컬럼을 case 와 end로 묶어주고 as 새로운 컬럼이름을 적어주며,
케이스 엔드 사이에는
 
바꾸고싶은 컬럼의 데이터들을
 
when 컬럼 데이터 then 'after'
else 'after2'
라고 적어주면 된다
 
3개 이상이라면 
when a1 then b1
when a2 then b2
else b3
 
이런식이겠다
 
 
하지만 위의 경우 처럼 2개의 선택 뿐이라면 if() 함수를 쓰는게 이롭다

if( )
select * ,if(released_year >= 2000,'최신책', '예전책')as book_type
from books;

라고 적게 되는데
( )파라미터 안에
 
첫번째 파라미터는 조건
2번째 파라미터는 True
3번째 파라미터는 False 라고 생각하자
 
결과는 같다
 
 
 
 
 
 
 
 

예제
제목에 stories를 포함하고 있으면 Short stories로 하고
제목이 Just Kids와 일치하면 Memoir로 하고
제목에 Heartbreaking이 포함되면 Memoir로 하고
그렇지 않으면 Novel이라 하고
컬럼의 이름은 TYPE으로 한다

이렇다면
 

select title, author_lname,
	case
 		when title like '%stories%' then 'Short stories'
    		when title = 'Just Kids' then 'Memoir'
    		when title like '%Heartbreaking%' then 'Memoir'
    		else 'Novel'
	end as type
from books;

 
 
이렇게 된다