프로그래머스/프로그래머스 - SQL

[sql] 중복, 시각, Null 처리

메타듀 2023. 2. 24. 16:57
728x90
반응형

중복 제거하기

[문제 설명]
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, 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            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문을 실행하면 다음과 같이 나와야 합니다.

count
2

 

 

입양 시각 구하기(1)

[문제 설명]
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다.

NAME                TYPE        NULLABLE
ANIMAL_ID            VARCHAR(N)    FALSE
ANIMAL_TYPE            VARCHAR(N)    FALSE
DATETIME            DATETIME    FALSE
NAME                VARCHAR(N)    TRUE
SEX_UPON_OUTCOME    VARCHAR(N)    FALSE

보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 09:00부터 19:59까지, 각 시간대별로 입양이 몇 건이나 발생했는지 조회하는 SQL문을 작성해주세요. 이때 결과는 시간대 순으로 정렬해야 합니다.

예시
SQL문을 실행하면 다음과 같이 나와야 합니다.

HOUR    COUNT
9        1
10        2
11        13
12        10
13        14
14        9
15        7
16        10
17        12
18        16
19        2

sql문

SELECT HOUR(DATETIME) as HOUR, count(HOUR(DATETIME))
from ANIMAL_OUTS
group by HOUR(DATETIME)
having HOUR >= 9 and HOUR <= 19
order by HOUR(DATETIME);

 

 

NULL 처리하기

[문제 설명]
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, 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이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

[예시]
예를 들어 ANIMAL_INS 테이블이 다음과 같다면

ANIMAL_ID    ANIMAL_TYPE        DATETIME                INTAKE_CONDITION    NAME    SEX_UPON_INTAKE
A350276        Cat                2017-08-13 13:50:00        Normal                Jewel    Spayed Female
A350375        Cat                2017-03-06 15:01:00        Normal                Meo        Ne![](https://velog.velcdn.com/images/mils333/post/9cc85a64-7404-4c69-9ef4-c24b0a07d79b/image.png)
![](https://velog.velcdn.com/images/mils333/post/2fc28ad7-7bad-4123-bc23-e6ddb4aea626/image.png)
utered Male
A368930        Dog                2014-06-08 13:20:00        Normal                NULL    Spayed Female

마지막 줄의 개는 이름이 없기 때문에, 이 개의 이름은 "No name"으로 표시합니다. 따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

ANIMAL_TYPE        NAME            SEX_UPON_INTAKE
Cat                Jewel            Spayed Female
Cat                Meo    Neutered     Male
Dog                No name            Spayed Female

sql문

select animal_type, nvl(name, 'No name'), sex_upon_intake
from animal_ins
order by animal_id;
반응형