문의하기
문의하기 아이콘
이메일
이메일 아이콘
전화하기
전화 아이콘
트위터
트위터 아이콘
유튜브
유튜브 아이콘
페이스북
페이스북 아이콘
인스타그램
인스타그램 아이콘
블로그
블로그 아이콘
up 아이콘
up 아이콘

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

이 경우, 사용하는 구문이 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;