문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDIGION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAME | TYPE | NULLABLE |
ANIMAL_ID | VARCHAR(N) | FALSE |
ANIMAL_TYPE | VARCHAR(N) | FALSE |
DATETIME | DATETIME | FALSE |
INTAKE_CONDITION | VARCHAR(N) | FALSE |
NAME | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | VARCHAR(N) | FALSE |
동물 보호소에 들어온 동물의 이름은 몇개인지 조회하는 SQL문을 작성해주세요. 이때 이름이 NULL인 경우는 집계하지 않으며 중복되는 이름은 하나로 칩니다.
예시
예를 들어 ANIMAL_INS 테이블이 다음과 같다면
ANIMAL_ID | ANIMAL_TYPE | DATETIME | INTAKE_CONDITION | NAME | SEX_UPON_INTAKE |
A562649 | Dog | 2024-03-20 18:06:00 | Sick | NULL | Spayed Female |
A412626 | Dog | 2016-03-13 11:17:00 | Normal | *Sam | Neutered Male |
A524634 | Dog | 2014-10-24 14:45:00 | Normal | *Sam | Neutered Male |
A465637 | Dog | 2017-16-14 11:54:00 | Normal | *Sweetie | Spayed Female |
보호소에 들어온 동물의 이름은 NULL(없음), *Sam, *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름을 고려하면 보호소에 들어온 동물 이름의 수는 2입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
count |
2 |
* 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.
문제 풀이
풀이 언어 : MySQL
-- 코드를 입력하세요
SELECT COUNT(DISTINCT NAME) "count"
FROM ANIMAL_INS;
단순히 테이블의 데이터를 그대로 가져오는 것이 아닌 갯수를 확인해야하는 문제이기 때문에 집계함수인 COUNT를 사용하였다. NULL값을 제거하기 위해 COUNT 집계함수 중에도 COUNT(표현식) 형태의 집계함수를 사용하였으며 중복을 제거하기 위해 NAME 앞에 중복을 제거하는 DISTINCT를 붙였다.
참고사항
COUNT(표현식)과 COUNT(*)의 결과는 다르게 나올 수 있다.
COUNT(*) | NULL 값을 포함한 행의 수를 출력한다. |
COUNT(표현식) | 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다. |
COUNT(*)은 전체 칼럼이 NULL인 행은 존재할 수 없기 때문에 NULL값이 포함된 칼럼이 일부 있다고 하더라도 출력하지만 COUNT(NAME)의 경우 NAME값이 NULL일 경우 출력하지 않는다.
https://www.notion.so/GROUP-BY-HAVING-5ca61e2e593a42f4bab573345463a7fb?pvs=4
참고사항
COUNT 함수에서 중복을 없애기 위해서는 괄호 안에 DISTINCT를 적어주어야 한다.
https://www.notion.so/GROUP-BY-HAVING-5ca61e2e593a42f4bab573345463a7fb?pvs=4
오답노트
처음 풀이하였을 때 DINSTINCT를 SELECT 옆에 붙여서 틀렸다.
NULL값을 없애기 위해 WHERE절을 사용해야 하는줄 알고 WHERE절을 붙여 코드를 만들었었다.
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/59408
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Code KATA > SQL 코드카타' 카테고리의 다른 글
[2024.12.07] 동명 동물 수 찾기 (0) | 2024.12.09 |
---|---|
[2024.12.06] 동물 수 구하기 (0) | 2024.12.06 |
[2024.12.05] 동물의 아이디와 이름 (1) | 2024.12.05 |
[2024.12.03] 역순 정렬하기 (0) | 2024.12.03 |
[2024.12.02] 이름이 있는 동물의 아이디 (0) | 2024.12.03 |