자동 seo 컨설팅 받으러가기

Mysql CASE WHEN THEN 구문

by 넥스트티
2021년 8월 18일
case when then




데이터 정제 시 컬럼의 조건에 따라서 다른 컬럼의 값을 업데이트 해줘야 할 경우가 있습니다.

이 경우, 사용하는 구문이 CASE 구문입니다.

구문의 기본형식은 다음과 같습니다.

CASE
WHEN 조건
THEN ‘반환 값’
WHEN 조건
THEN ‘반환 값’
ELSE ‘WHEN 조건에 해당 안되는 경우 반환 값’
END

이 구문을 테이블에서 특정 컬럼을 업데이트 할 경우로 예제를 만들어 보면 다음과 같습니다.

gn이라는 컬럼의 값이 1일때 level에 10이라는 값을 넣고
gn이라는 컬럼의 값이 2일때 level에 20이라는 값을 넣고
그 외의 gn 컬럼의 값은 모두 level에 0이라는 값을 넣어서
level 컬럼을 업데이트 하고자 합니다.

UPDATE table
SET
   level = CASE
   WHEN gn=’1′
   THEN ’10’
   WHEN gn=’2′
   THEN ’20’
   ELSE ‘0’
   END
WHERE grade=’2′;

업데이트 할 경우에는 WHERE 절을 항상 신경써줘야 합니다.
아니면 전체 데이터가 변경되기때문에 난감한 경우가 많습니다.

위의 예제는 간단한데 실제로는 복잡한 연산을 하는 경우가 많습니다.
조건에 따라서 다른 가중치를 준다던지 하는 경우에 사용하면 효율적일 것입니다.

다음은 집계 함수인 Group by 문을 사용해서 통계를 낼 경우, 조건에 따라 카운팅을 하는 쿼리문입니다.

select
case
when DA < 10 then 0
when DA >= 10 and DA <30 then 10
when DA >= 30 and DA <50 then 30
when DA >= 50 and DA <70 then 50
when DA >= 70 and DA <90 then 70
when DA >= 90 then 90
end
as DAgrade, count(*)
from table group by DAgrade;

조금 더 복잡해 보이시죠? 위의 조건 문에 좀 더 많은 조건이 있는 것 뿐입니다.
조건을 as DAgrade라는 열로 지정을 했고 이 열을 group by DAgrade 문을 통해서 count(*)로 개수를 산정한 것입니다.
이렇게 여러가지로 응용을 해보면 데이터 정제에 많은 도움이 될 것입니다.

아래는 또 다른 예제로 구글 / 네이버 여부에 따라서 기존 page, row 파라미터에 따라 랭킹을 산정하는 예 입니다.

SELECT *,
CASE
WHEN gn=’google’
THEN (page-1)*10+`row`
WHEN gn=’naver’
THEN (page-1)*15+`row`
ELSE (page-1)*10+`row`
END
as ranking
FROM Table;

실제 컬럼에 업데이트는 다음과 같이 하면 되겠죠.

UPDATE Table
SET `rank`=
CASE
WHEN gn=’google’
THEN (page-1)*10+`row`
WHEN gn=’naver’
THEN (page-1)*15+`row`
ELSE (page-1)*10+`row`
END;

관련포스트

테이블 조인
업데이트(update) 시 테이블 조인(table join) 구문

UPDATE tablea a INNER JOIN tableb b ON a.키워드=b.키워드 SET a.검색량=b.검색량 WHERE b.검색량 > 100 위의 예는 A테이블과 B테이블을 조인해서 B테이블의 검색량이 100 이상인 것만 A테이블의 검색량을 업데이트 하는... more

자동증가
Mysql 자동증가(auto increment) 및 프라이머리키(primary key) 컬럼 추가

테이블을 조정할 경우,  많이 사용됩니다. 구문은 다음과 같습니다. ALTER TABLE 테이블명 ADD COLUMN 컬럼명 INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; 컬럼 삽입 시 위치 여기에서 FIRST는 테이블에서 제일 처음으로 컬럼을... more

mysql select
Mysql SQL INSERT INTO SELECT 구문

데이터 정제 시 자주 사용하는 SQL문으로 table 2의 데이터를 select 문으로 호출해서 table1에 삽입합니다. 경우에 따라서 where 절을 넣을 수도 있습니다. id와 같이 자동증가하는 컬럼이 있다면 빼고 아래와 같이 넣으면... more