그룹 함수 문제
https://school.programmers.co.kr/learn/courses/30/lessons/59408
[문제 설명]
주어진 테이블 내에서 NULL을 제외한 동물의 이름이 몇 개인지 출력하는 문제입니다.
단순히 열이 몇 개 인지 구현한다면 COUNT(*)로 끝낼 수 있습니다.
그러나 동물 이름에 대해 중복을 제거하고 COUNT해줘야 하는 문제입니다.
중복을 제거하는 키워드인 DISTINCT를 NAME에 사용하여 중복을 제거하고 COUNT를 하면 해결됩니다.
(= COUNT(DISTINCT NAME))
어려운 문제는 아니지만 헷갈릴만한 부분이 두 가지 있습니다.
첫 번째로는 COUNT(DISTINCT NAME) / DISTINCT COUNT(NAME) 의 차이점입니다.
차근차근 살펴보면
COUNT(DISTINCT NAME) => COUNT(중복 제거된 이름) => 중복 제거 후 COUNT
DISTINCT COUNT(NAME) => COUNT(이름)을 하고 중복 제거 => COUNT 후 중복 제거
즉 DISTINCT COUNT(NAME)은 NAME의 COUNT한 결과(한 줄)에 대해 중복을 제거하므로 아무 의미가 없게 됩니다.
두 번째로는 NULL 제거입니다.
구글링을 조금 해보니 대부분의 코드에서 WHERE NAME IS NOT NULL을 사용하여 NULL인 경우를 제거하고 있었습니다.
하지만 COUNT같은 그룹함수는 자체적으로 NULL을 포함하지 않으므로 이 문제를 해결하는 데에 WHERE절은 필요가 없습니다.
※ COUNT(*)처럼 모든 열을 다 보면서 세는 경우에 특정 열이 NULL인 행을 제외하고 싶다면 그때 WHERE절을 사용하면 됩니다.
[소스 코드] / ORACLE SQL
SELECT COUNT(DISTINCT NAME)
FROM ANIMAL_INS;
'데이터 베이스 > Programmers' 카테고리의 다른 글
[프로그래머스 SQL 고득점 Kit] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.03.03 |
---|