- 첫 작성일 : 21년 1월 10일 velog 블로그
🕶 서론
('~이다'로 끝내는 것은 글을 편하게 쓰기 위해서이니 양해바랍니다.)
이 글은 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를 사용해도 될 것 같다.
- 위에 있는 함수들은 아주 간략하게 설명한 것이기 때문에
더 다양한 방식으로 사용도 가능하기에 찾아서 공부하면 도움이 될 것 같다.
'DataBase' 카테고리의 다른 글
[MySQL] Mac M1 에서 MySQL password 재설정 (2) | 2022.04.25 |
---|---|
[MS-SQL] IN 구문 사용 시 매개변수 2100개 초과 (0) | 2021.11.09 |
[PostgreSQL] CLOB타입과 TEXT타입 - JPA (0) | 2021.04.23 |
[SQL]IN / NOT IN / EXISTS / NOT EXISTS 은 어떻게 쓰는걸까? (0) | 2020.12.02 |
left outer join ? (0) | 2020.10.30 |