예전에는 생각도 않고 쓰던 일들이 있을지 모른다는 생각에 뒤적이다보면 나오는 신기한 상황을
하루하루 느끼면서 살고 있습니다.
인터넷에서 낚시를 피해 제대로 된 먹이를 찾기가 쉽지가 않지만 검증이라는 수고를 거치면 되니 시간과의 싸움이라 생각합니다.
아무튼, 오늘은 어찌 sum()함수를 사용하다가 문득 다른 방법이 있을 것 같다라는 생각으로 찾았습니다.
원하는 컬럼과 그리고 원하는 컬럼 중 특정 컬럼을 필터
하는 방법입니다.
제가 알고 있던 sum()이런 식이 었습니다.
이런식의 테이블에서 value컬럼의 합계를 얻으려면
sum(value) 를 select문 안에서 해주는 일이었습니다.
하지만 이번 포스팅 전에 처한 상황은 이렇지 않았죠.
이런식인데 status가 O이고 del_yn이 0인 것들입니다.
del_yn은 이미 WHERE절에서 걸러 내어 문제가 아니지만 sum(value)를 통해서는 원하는 값을 얻어낼 수 없을 것입니다.
이런 상황이 자주 일어나는 것은 아닌 것 같습니다만,
알아둘 필요가 있는 것 같습니다.
sum()을 사용하면서 또 조건을 준다는 것은 이미 GROUP BY가 이뤄진 상태에서의 진행이었습니다.
최신의 어떤 ROW의 결과 중 특정 컬럼의 정보만을 가공하겠다는 의미로 사용하였습니다.
GROUP BY없이 이 일을 진행하였다면 한 개 ROW만 반환되어 TABLE전체에 대한 SUM()이 발생하니까요.
아무튼 사용법은 역시나 간단하였습니다.
하지만 상당히 생소하였습니다..... 처음이라서요.
이런식으로 사용합니다.
우리가 알고 있는 그 IF와 크게 차이가 없습니다.
이런식으로 하면 GROUP BY한 ROW들에서도 각각 GROUP의 특정 컬럼을 또 필터링하여 값을 얻기 쉽습니다.
특정 컬럼 몇가지에 대해서만 조건이 필요할 때 쓰는것이 물론 더 빠르게 동작하도록 하는 것이죠.
위의 SUM(if( , , ))형태외에 한 가지가 더 있습니다.
CASE, THEN, ELSE, END 입니다. switch~case와 비슷한 구성입니다.
IF와 CASE는 사실 sum()에서만 쓰이는 것이 아니라 다른 컬럼에 대한 개별적인 조건 부여시에 사용됩니다.
더 많은 곳에서 다양하게 사용할 수 있으니,
sum()에서만이라는 오해는 없으셨음 좋겠습니다!
'프로그래밍' 카테고리의 다른 글
Mybatis XML SAXParseException Exception 해결하기 (0) | 2015.07.31 |
---|---|
이클립스 우클릭 New 목록 바꾸기(custom) (2) | 2015.07.31 |
[javscript/jquery/mybatis] 체크박스를 이용한 데이터 수집과 전송, mybatis의 foreach를 이용한 간단한 where절 만들기 (0) | 2015.07.14 |
[Chrome/크롬]브라우저 개발자 모드 javascript 캐시 기능 끄기 (0) | 2015.06.10 |
[jQuery] 간결하게 on / off 이미지나 버튼 제어하기 (0) | 2015.05.20 |