https://programmers.co.kr/learn/courses/30/lessons/59041#
문제 요구사항은 다음과 같다
- ANIMAL_INS 테이블에서 두번 이상 쓰인 이름과 횟수를 출력
- 이름없는 건 집계에서 제외
- 이름순 조회
group by 와 having 을 적절히 이용하면 되는 문제이다.
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
AND TRIM(NAME) <> ""
GROUP BY NAME
HAVING COUNT(NAME) >= 2
ORDER BY NAME;
문제 풀이 과정에서 애매하게 알던 점을 정리할 수 있었다.
- count(*) : NULL 포함, 중복 포함 행 수
- count(컬럼명) : NULL 제외, 중복 포함 컬럼 수
- count(distinct 컬럼명) : NULL 제외, 중복 제외 컬럼 수
사실 "이름이 없는 것"에 빈 스트링도 포함인지는 문제에서 명확히 나오지 않았다.
하지만 만약 실무에서 NULL은 아니지만 의미없는 문자열도 제외하고 싶다면
TRIM(NAME) <> ""
위처럼 스페이스, 탭, 빈 스트링을 모두 제외할 수 있도록 하는 것이 좋다고 생각한다.
'Programming > DB, SQL' 카테고리의 다른 글
[Oracle] docker로 db생성해서 샘플 테이블 이용하기 (1) | 2021.08.27 |
---|
댓글