TIL / 프로그래머스 MySQL 문제풀기 (Level3)

해달·2021년 10월 13일
0

TIL

목록 보기
56/80
post-thumbnail
post-custom-banner

Today

  • MySQL 프로래머스 문제 풀기 (Level3)

SELECT 실행 순서

-작성순서실행순서실행해석
1SELECTFROM어느 테이블 대상으로 접근 할 것인가
2FROMWHERE해당 테이블에서 조건에 만족하는 레코드(row) 조회
3WHEREGROUP BY레코드(row)들을 기준으로 그룹화, 그룹은 하나의 row
4GROUP BYHAVING생성된 그룹 중 특정조건 필터
5HAVINGSELECT필터된 결과에 맞는 필드조회
6ORDER BYORDER BY필드를 기준으로 지정된 방식으로 정렬
7LIMITLIMIT입력된 개수 위에서부터 출력


1. 없어진 기록 찾기 (JOIN)

  • 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
SELECT A.animal_id, A.name
FROM ANIMAL_INS AS A
RIGHT JOIN ANIMAL_OUTS AS B
ON A.animal_id = B.animal_id
WHERE A.animal_id IS NULL
ORDER BY B.animal_id

2. 있었는데요 없었습니다

  • 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
SELECT A.animal_id, A.name
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B 
ON A.animal_id = B.animal_id
WHERE A.datetime > B.datetime
ORDER BY A.datetime

3. 헤비 유저가 소유한 장소

  • 이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
SELECT *
FROM PLACES
WHERE HOST_ID IN ( //WHERE문에서 이 목록에 대응하는 HOST_ID가 있는 행만 조회
    SELECT HOST_ID  //공간을 2개 이상 등록한 HOST_ID 목록을 서브 쿼리 테이블
    FROM PLACES
    GROUP BY HOST_ID 
    HAVING COUNT(ID) >= 2)
ORDER BY ID

4. 오랜 기간 보호한 동물(1)

  • 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.
-- 코드를 입력하세요
SELECT A.name, A.datetime
FROM ANIMAL_INS AS A LEFT JOIN animal_outs AS B 
ON A.animal_id = B.animal_id
WHERE B.datetime IS NULL // 입양날짜가 비어 있는 조건
ORDER BY A.datetime
LIMIT 3

5. 오랜 기간 보호한 동물(2)

  • 입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.
SELECT A.ANIMAL_ID, A.NAME 
FROM ANIMAL_INS AS A, ANIMAL_OUTS AS B 
WHERE A.ANIMAL_ID = B.ANIMAL_ID // 아이디가 동일하게 겹치는 조건
ORDER BY B.DATETIME - A.DATETIME // 차이나는 기간으로 정렬
DESC LIMIT 2

마치며,

JOIN이 Mysql의 꽃(?)이라고 하던데 이전에 회사를 다니며 익혔던 엑셀문법과 많이 비슷해서 감을 잡는데 어렵지는 않았다.
서브쿼리문법은 사용하는 법을 몰라 검색해가며 풀이를 보면서 이해했다.
겹치는 부분에서 어떻게 조인할지 처음에 정하고 문제 푸는것이 중요 한 것 같다.

post-custom-banner

0개의 댓글