서로 다른 조건을 동시에 COUNT하기
서로 다른 조건을 동시에 COUNT하기
최근에 쿼리를 작성하다가 서로 다른 조건일 경우 동시에 COUNT 후 값을 출력해야되는 경우가 생겼다.
물론, 작성한 쿼리는 업무 이해를 잘못하면서 생긴 쿼리라 사라지긴했지만… 잊지 않기 위해서 & 공유하고자 여기에 작성해본다.
test_table이라는 테이블 안에 temp라는 column이 0 또는 1의 값으로만 이루어져있다고 가정하자.
temp |
---|
0 |
1 |
0 |
0 |
1 |
이걸 0이나 1만 따로 COUNT하는 것은 간단하다.
SELECT COUNT(*)
FROM test_table
WHERE temp=0 --또는 1
근데 0과 1이 몇개가 있는지 동시에 알고 싶다면 WHERE 조건에서 어떻게 해야할 지 난감하게 된다.
이 문제는 DECODE 와 SUM 함수로 해결이 가능하다. 알다시피 DECODE는 if~else 구문 역할을 해주므로 조건절의 역할을 해준다. SUM은 COUNT의 역할을 대체해준다고 생각하면 된다.
SELECT
SUM( DECODE (temp, 0, 1, 0) ) AS tempValue0,
SUM( DECODE (temp, 1, 1, 0) ) AS tempValue1
FROM test_table
위 쿼리를 실행하면 밑의 테이블처럼 결과가 나올 것이다.
tempValue0 | tempValue1 |
---|---|
3 | 2 |