2022. 11. 20. 15:01ㆍSQL 문제
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
NAMETYPENULLABLEANIMAL_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_IDANIMAL_TYPEDATETIMEINTAKE_CONDITIONNAMESEX_UPON_INTAKEA562649 | Dog | 2014-03-20 18:06:00 | Sick | NULL | Spayed Female |
A412626 | Dog | 2016-03-13 11:17:00 | Normal | *Sam | Neutered Male |
A563492 | Dog | 2014-10-24 14:45:00 | Normal | *Sam | Neutered Male |
A513956 | Dog | 2017-06-14 11:54:00 | Normal | *Sweetie | Spayed Female |
보호소에 들어온 동물의 이름은 NULL(없음), *Sam, *Sam, *Sweetie입니다. 이 중 NULL과 중복되는 이름을 고려하면, 보호소에 들어온 동물 이름의 수는 2입니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.
count2 |
※ 컬럼 이름(위 예제에서는 count)은 일치하지 않아도 됩니다.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59408
정답
SELECT DISTINCT COUNT(DISTINCT NAME)
FROM ANIMAL_INS
WHERE NAME IS NOT NULL
이름에 대해 중복되는 이름 하나로 친다고 말했으니 중복제거 함수인 DISTINCT 를 NAME옆에 붙여서 COUNT 함수를 이용하여 갯수를 구한다. 그리고 추가로 NAME이 NULL값인것은 안가져온다고 하였으니 WHERE 절에 추가로 조건을 붙엳준다.
중복제거인 DISTINCT 에 대하여 알아보다가 한가지 몰랐던 사실을 알게되어서 작성한다. DISTINCT 한 컬럼에만 적용할수 없고 SELECT문 뒤에 있는 모든 컬럼에 적용이 된다. SELECT DISTINCT COL1,COL2,COL3 이면 COL1,COL2,COL3이 모든 같은 행에 대해서만 중복이라판단하고 제거한다. SELECT (DISTINCT COL1),COL2,COL3 처럼 괄호안에 넣는 것은 문법위반이라 사용할수 없다.
'SQL 문제' 카테고리의 다른 글
식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2022.11.20 |
---|---|
진료과별 총 예약 횟수 출력하기 (0) | 2022.11.20 |
가격이 제일 비싼 식품의 정보 출력하기 (0) | 2022.11.20 |
상위 n개 레코드 (0) | 2022.11.20 |
여러 기준으로 정렬하기 (0) | 2022.11.19 |