테이블 설명 :
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.
문제 설명 : 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
SELECT
O.ANIMAL_ID,
O.NAME
FROM ANIMAL_INS I
RIGHT JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID
🗒️코멘트 : NULL
테이블 설명 :
다음은 식품공장의 주문정보를 담은 FOOD_ORDER 테이블입니다. FOOD_ORDER 테이블은 다음과 같으며 ORDER_ID, PRODUCT_ID, AMOUNT, PRODUCE_DATE, IN_DATE,OUT_DATE,FACTORY_ID, WAREHOUSE_ID는 각각 주문 ID, 제품 ID, 주문양, 생산일자, 입고일자, 출고일자, 공장 ID, 창고 ID를 의미합니다.
문제 설명 : FOOD_ORDER 테이블에서 5월 1일을 기준으로 주문 ID, 제품 ID, 출고일자, 출고여부를 조회하는 SQL문을 작성해주세요. 출고여부는 5월 1일까지 출고완료로 이 후 날짜는 출고 대기로 미정이면 출고미정으로 출력해주시고, 결과는 주문 ID를 기준으로 오름차순 정렬해주세요.
SELECT
O.ORDER_ID,
O.PRODUCT_ID,
DATE_FORMAT(O.OUT_DATE,"%Y-%m-%d") OUT_DATE,
CASE WHEN DATEDIFF(DATE_FORMAT(O.OUT_DATE,"%Y-%m-%d"),"2022-05-01") <= 0 THEN "출고완료"
WHEN DATEDIFF(DATE_FORMAT(O.OUT_DATE,"%Y-%m-%d"),"2022-05-01") > 0 THEN "출고대기"
ELSE "출고미정"
END AS "출고여부"
FROM FOOD_ORDER O
ORDER BY O.ORDER_ID ASC
🗒️코멘트 : NULL
테이블 설명 :
다음은 식당의 정보를 담은 REST_INFO 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.
문제 설명 : REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
SELECT
R.FOOD_TYPE,
R.REST_ID,
R.REST_NAME,
R.FAVORITES
FROM REST_INFO R
JOIN (
SELECT
FOOD_TYPE,
MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
) R2
ON R.FAVORITES = R2.FAVORITES AND R.FOOD_TYPE = R2.FOOD_TYPE
ORDER BY FOOD_TYPE DESC
🗒️코멘트 : 여태까지 풀었던 MySQL 문제 중에서 가장 어려웠던 문제다...처음에는 단순하게 생각해서 그냥 GROUP BY
로 묶어버리면 되겠지라고 생각했는데 계속 오답처리가 나서 SELECT * FROM TABLE
로 데이터를 다 뜯어본 결과 단순한 GROUP BY
문제로 풀을 시 MAX
로 설정한 FAVORITE과 GROUP BY
로 묶은 FOOD_TYPE
은 제대로 갖고 오지만 그 외 값들이 제대로 반영되지 않아 오류를 냈던 것이다. 앞으로 GROUP BY
로 묶을 때 다른 값들도 명확하게 같이 주제별로 묶을 수 있는 지 확인해봐야 될 것 같다.
프로그래머스에 MySQL 문제가 많이 없다보니 이제 레벨 3도 거의 동이 났다. 하지만 확실히 쿼리에 대한 개념을 깔끔하게 짚고 넘어가는 부분이 좋은 것 같다. 이제 LV.5까지 15문제만 남았다..과연 LV.5까지 순조롭게 풀 수 있을지는 모르겠지만 이걸 끝을 봐야지 ORM을 제대로 시작할 수 있을 것 같다.
가즈아!!