QGIS 필드 계산기에서 CASE 조건문을 연습해 보았다. if 조건문도 있긴 한데 CASE가 더 먼저 있길래 우선 협상자로 선정하고 if 조건문은 다음에 연습해 보는 것으로.
일단 무작위로 포인트 11개를 만들어 놓고 아무 맥락 없고 개연성 없는 속성을 넣어 아래와 같이 준비했다.
- 선호음식 : 김치찌개, 된장찌개, 부대찌개, 콩나물, 숙주나물, 돌나물, 누룽지, 숭늉을 무작위 입력
- 투표인원 : 무작위 숫자 입력
1. 조건문 방향
선호음식에서,
- 김치찌개, 된장찌개, 부대찌개는 찌개로
- 콩나물, 숙주나물, 돌나물은 나물로
- 나머지 여기에 속하지 않는 항목은 기타 음식으로 변환
투표인원에서,
- 10명 미만은 적음으로,
- 10명 이상 50명 미만은 보통으로,
- 50명 이상 100명 미만은 많음으로,
- 그 밖의 100명 이상은 매우 많음으로 변환
2. 조건문(CASE) 형식 확인
일단 표현식이,
CASE WHEN condition THEN result [ …n ] [ELSE result ] END
으로 되어 있다. 엑셀에서의 조건식 느낌이라기보다는 왠지 영어 문장 같다. 참고로,
- 필드 이름은 큰 따옴표로 묶고 "필드 이름"
- 필드 값, 조건 값이 문자면 작은 따옴표로 묶고 '문자'
- 필드 값, 조건 값이 숫자면 아무 것도 붙이지 않고 숫자 그대로를 사용
3. 선호음식 part
3-1. 조건문 만들기
일단 내가 원하는 표현식을 보기 편하게 줄 바꿈을 하며 만들어 봤는데 한 줄로 만들지 않고 그냥 이 상태로 입력해도 인식을 잘한다.
CASE
WHEN "선호음식" = '김치찌개' THEN '찌개'
WHEN "선호음식" = '된장찌개' THEN '찌개'
WHEN "선호음식" = '부대찌개' THEN '찌개'
WHEN "선호음식" = '콩나물' THEN '나물'
WHEN "선호음식" = '숙주나물' THEN '나물'
WHEN "선호음식" = '돌나물' THEN '나물'
ELSE '기타 음식'
END
WHEN "선호음식" = '김치찌개' THEN '찌개'
WHEN "선호음식" = '된장찌개' THEN '찌개'
WHEN "선호음식" = '부대찌개' THEN '찌개'
WHEN "선호음식" = '콩나물' THEN '나물'
WHEN "선호음식" = '숙주나물' THEN '나물'
WHEN "선호음식" = '돌나물' THEN '나물'
ELSE '기타 음식'
END
3-2. 결과
4. 투표인원 part
4-1. 조건문 만들기
재밌는 부분이 있다면, 가운데 범위(예를 들어 10~50 명, 50~100 명)의 경우, WHEN으로 먼저 잡아버린 조건은 넣지 않는다는 점이다. 마치 '10 <= "투표인원" < 50'처럼 넣어야 할 것 같지만 실제 이렇게 넣어 보면 의외로 엉망징창 결과가 나온다.
CASE
WHEN "투표인원" < 10 THEN '적음'
WHEN "투표인원" < 50 THEN '보통'
WHEN "투표인원" < 100 THEN '많음'
ELSE '매우 많음'
END
WHEN "투표인원" < 10 THEN '적음'
WHEN "투표인원" < 50 THEN '보통'
WHEN "투표인원" < 100 THEN '많음'
ELSE '매우 많음'
END
이런 형태의 표현식은 QGIS의 예제에도 비슷하게 써 있다. 그렇게 써야 제대로 동작하나보다.
4-2. 결과