본문 바로가기
데이터분석/SQL

[SQL] 아픈 동물 찾기(프로그래머스/MySQL)

by ms-da 2024. 10. 9.
반응형

 

안녕하세요! ms-da입니다!


오늘은 프로그래머스 코딩테스트 연습에 있는 "아픈 동물 찾기" 문제를 포스팅하려고 합니다!

바로 포스팅 시작할게요! :)
(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/59036)

 

 


 

1. 문제 : 아픈 동물 찾기(Lv. 1)

 

 

 


 

2. 문제 설명

 

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 문을 작성해주세요.


이때 결과는 아이디 순으로 조회해주세요.
(아픈 동물은 "INTAKE_CONDITION"이 Sick인 경우를 뜻함)

[ 예시 ]

 

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

 

ANIMAL_ID ANIMAL_TYPE DATETIME INTAKE_CONDITION NAME SEX_UPON_INTAKE
A365172 Dog 2014-08-26 12:53:00 Normal Diablo Neutered Male
A367012 Dog 2015-09-16 09:06:00 Sick Miller Neutered Male
A365302 Dog 2017-01-08 16:34:00 Aged Minnie Spayed Female
A381217 Dog 2017-07-08 09:41:00 Sick Cherokee Neutered Male

 

이 중 아픈 동물은 Miller와 Cherokee입니다.

 

따라서 SQL문을 실행하면 다음과 같이 나와야 합니다.

 

 

[ 출력 결과 ]

ANIMAL_ID NAME
A367012 Miller
A381217 Cherokee

 

3. 문제 풀이

 

# 1안(= 사용)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION = 'Sick'
ORDER BY ANIMAL_ID ASC

# 2안(IN 사용)
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE INTAKE_CONDITION IN ('Sick')
ORDER BY ANIMAL_ID ASC

 

# 1안 풀이 설명

ANIMAL_INS의 테이블에 존재하는 컬럼들이 [출력 결과]에 나와 있는 컬럼들과 동일하게

 

" SELECT "를 통해 'ANIMAL_ID' 컬럼과 'NAME' 컬럼을 보여주고

" WHERE "을 통해 'INTAKE_CONDITION' 컬럼의 값이 "Sick"인 값만을 =(같음)으로 필터링했어요!
( 'INTAKE_CONDITION' 컬럼의 값이 "Sick"인 행을 조회)

" ORDER BY (컬럼) ASC "를 통해 'ANIMAL_ID' 컬럼의 오름차순으로 조회 결과가 나타나게 코드를 작성했어요!

 

 

# 2안 풀이 설명

 

2안 풀이는 1안과 거의 동일해요!

차이가나는 부분은 " WHERE "을 통해 데이터를 필터링하는 과정에서 = 가 아닌 IN 을 이용했어요!

" WHERE "을 통해 'INTAKE_CONDITION' 컬럼의 값이 "Sick"를 포함하는 값을 가져오게 조회했어요!
( 'INTAKE_CONDITION' 컬럼의 값이 "Sick"을 포함하는 행을 조회)

 

 


 

 

4. 문제 풀이 후기

이번 문제도 기초적인 문제를 다루고 있는 게 보입니다!

데이터를 조회할 때 모든 데이터를 조회하는 경우는 많이 없고


'특정 조건'에 해당하는 데이터를 보고 싶은 경우가 대다수입니다!

 


저도 데이터 분석 일을 하면서


테이블의 구조를 파악하려는 경우가 아니라면


조건을 넣어 조건에 만족하는 데이터만 조회하고 있습니다!

 


모든 SQL문을 다 알고 있을 수는 없으니


제가 일하면서 많이 안 쓰이는 쿼리가 있다면 말씀드리려고 하고 있는데


아직은 기본 문제만을 다루고 있다보니,

 

이용하고 있다는 말씀만 드리고 있네요...!

 


이번 문제는 WHERE 문을 이용해 조건을 넣어서 특정한 값을 조회하는 문제를 풀어봤습니다!

설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면


언제든지 댓글로 남겨주세요!


빠르게 궁금증을 해결해드릴게요! 공감과 댓글은 큰 힘이 됩니다!


읽어주셔서 감사해요!

또 다른 SQL 문제로 찾아뵐게요!

 

 

 

 

 

 

 

반응형