[PostgreSQL]COUNT 사용 시 주의

Hyo·2021년 1월 10일
0

sql

목록 보기
1/1
post-thumbnail

블로그 이전

https://kdhyo98.tistory.com/26

🕶 서론

('~이다'로 끝내는 것은 글을 편하게 쓰기 위해서이니 양해바랍니다.)
이 글은 postgresql 문법으로 작성되었지만 다른 sql에서도 주의해야 할 사항이다.

회사에서 COUNT를 사용하다가 생각했던 값과 다르게 나오는 것을 발견되었다.
과장님께서 간단하게 해결책을 제시해주셨고, 그 방법을 기록할 생각이다.

🎃 count

COUNT 란 해당하는 조건(없어도 가능)에 원하는 컬럼 값이 존재하는지 확인하여
존재하는 것의 총 개수를 확인하는 문법이다.

위 테이블에서 contents에 내용이 있는 것들의 개수를 알아보기 위해 COUNT를 사용한다.
내가 원하는 답은 값이 들어있는 것의 합인 '6'을 원한다.

8????

결과는 생각과는 다르게 8이라는 결과가 나오게 되었다.
그 이유는 COUNT 가 NULL이 아닌 컬럼을 모두 합하기 때문이다.
결국 빈 값이 들어가 있는 8, 10 컬럼들도 COUNT 에 포함이 되어 버린다.

🔑 해결책

6!!

우리는 간단하게 SUM을 사용하여 COUNT에서 원하는 기능을 사용할 수 있다.

CASE WHEN

조건문

case when 조건문 then 일치 시 else 아닐 시 end

coalesce(param1, param2)

컬럼이 null일 시 대체 값 지시

coalesce(컬럼, 0)

컬럼이 null일 시 0을 반환 null이 아니면 컬럼 반환

char_length(값)

문자열의 문자 수를 반환

char_length(contents)

이 외에도
bit_length() - 비트 단위로 측정된 문자열의 길이 반환
length() = octet_length() - 바이트 단위로 측정된 문자열의 길이 반환
등이 존재한다.

🎉 결론

count를 사용하게 되면 '' 처럼 빈 값도 포함시키기 때문에
원하는 값과 다른 값이 나올 수 있어 주의를 기울여서 사용해야 한다.
다른 방식으로 위와 같은 방식이 있다는 것이니 다른 방식을 찾아보는 것도
좋은 공부가 될 것 같다.

🎭 TMI..흠?


null을 넣어도 0보다 크지 않기 때문에 coalesce 는 사용을 안 해도 될 것 같다는 생각이 들었다.


WHERE을 통해서 COUNT를 사용해도 될 것 같다.

  • 위에 있는 함수들은 아주 간략하게 설명한 것이기 때문에
    더 다양한 방식으로 사용도 가능하기에 찾아서 공부하면 도움이 될 것 같다.
profile
생각중..🤔🤔🤔

0개의 댓글