MySQL - 프로그래머스 레벨 : 2(2) - ORDER BY '정답률'

먹보·2022년 11월 21일
0
post-thumbnail

1. NULL 처리하기

테이블 설명 : ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

문제 : 입양 게시판에 동물 정보를 게시하려 합니다. 동물의 생물 종, 이름, 성별 및 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 프로그래밍을 모르는 사람들은 NULL이라는 기호를 모르기 때문에, 이름이 없는 동물의 이름은 "No name"으로 표시해 주세요.

//CASE 문
SELECT
ANIMAL_TYPE,
CASE WHEN NAME IS NULL THEN "No name"
ELSE NAME
END AS NAME,
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
//IF 문 사용
SELECT 
ANIMAL_TYPE, 
IF(NAME IS NULL,"No name",NAME),
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

🗒️코멘트 : MySQL에서도 IF문이 존재 한다는 것을 알았기에 CASE WHEN...THEN보다 이번에는 조건문을 사용해보았다.

2. DATETIME에서 DATE로 형 변환

테이블 설명 : ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

문제 : ANIMAL_INS 테이블에 등록된 모든 레코드에 대해, 각 동물의 아이디와 이름, 들어온 날짜1를 조회하는 SQL문을 작성해주세요. 이때 결과는 아이디 순으로 조회해야 합니다.

SELECT
ANIMAL_ID,
NAME,
DATE_FORMAT(DATETIME,"%Y-%m-%d") AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID

🗒️코멘트 : DATE_FORAMTE에는 여러가지 형식이 있으니 https://www.w3schools.com/sql/func_mysql_date_format.asp 문서에서 찾아서 상황에 맞게 적용하면 될 것이고, 바꾸는 형식은 항상 STRING으로 적용할 것!

3. 고양이와 개는 몇 마리 있을까?

테이블 설명 : ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

문제 : 동물 보호소에 들어온 동물 중 고양이와 개가 각각 몇 마리인지 조회하는 SQL문을 작성해주세요. 이때 고양이를 개보다 먼저 조회해주세요.

SELECT
ANIMAL_TYPE,
COUNT(ANIMAL_TYPE)
FROM ANIMAL_INS
GROUP BY ANIMAL_TYPE
ORDER BY ANIMAL_TYPE

🗒️코멘트 : 문제가 약간 불친절...개와 고양이 말고도 다른 동문들도 있는 줄 알았음...마음에 들지 않지만 그래도 나름 중요했던 문제인 것 같다.

4. 중성화 여부 파악하기

테이블 설명 : ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

문제 : 보호소의 동물이 중성화되었는지 아닌지 파악하려 합니다. 중성화된 동물은 SEX_UPON_INTAKE 컬럼에 'Neutered' 또는 'Spayed'라는 단어가 들어있습니다. 동물의 아이디와 이름, 중성화 여부를 아이디 순으로 조회하는 SQL문을 작성해주세요. 이때 중성화가 되어있다면 'O', 아니라면 'X'라고 표시해주세요.

SELECT
ANIMAL_ID,
NAME,
CASE SEX_UPON_INTAKE 
WHEN "Neutered Male" THEN 'O'
WHEN "Spayed Female" THEN 'O'
ELSE 'X'
END AS 중성화
FROM ANIMAL_INS

🗒️코멘트 : 다중 케이스!! (다중 그림자 분신술!!은 장난)

5. 입양 시각 구하기(1)

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

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

SELECT
HOUR(DATETIME) AS HOUR,
COUNT(*) AS COUNT
FROM ANIMAL_OUTS
WHERE DATE_FORMAT(DATETIME, '%T') BETWEEN '09:00' AND '19:59'
GROUP BY HOUR
ORDER BY HOUR

🗒️코멘트 : 오늘 풀었던 문제 중에서 가장 어려운 문제, 시간 별로 DATA 형식을 바꾸는 건이 난제였지만 구글링에 힘을 다시 한 번 씨게 느낄 수 있는 좋은 순간이었다.

📌총평 :

오늘도 MySQL 쿼리와 시작하는 보람찬 하루. 이제 1차 프로젝트가 마무리가 되어가는 만큼 발걸음도 가벼워진다. 곧 1차 프로젝트 진행 상황 및 후기들을 정리해서 올릴 생각을 하니..여태까지 잘 정리하지 못했기에 과연 얼마나 잘 올릴 수 있는지 또한 두려워진다. 한 번 가볼 수 있는 데 까지 가보자고..

사용했던 MySQL 문법 : CASE WHEN...THEN...ELSE...END AS | IF

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글