Backend
home
3️⃣

Level3

1. 대장균들의 자식의 수 구하기

SELECT P.ID, COUNT(C.ID) AS CHILD_COUNT FROM ECOLI_DATA AS P LEFT JOIN ECOLI_DATA AS C ON P.ID = C.PARENT_ID GROUP BY P.ID ORDER BY P.ID;
SQL
복사

2. 대장균의 크기에 따라 분류하기 1

SELECT ID, CASE WHEN SIZE_OF_COLONY <= 100 THEN 'LOW' WHEN SIZE_OF_COLONY <= 1000 THEN 'MEDIUM' ELSE 'HIGH' END AS SIZE FROM ECOLI_DATA ORDER BY ID ASC;
SQL
복사

3. 대장균의 크기에 따라 분류하기 2

-- 코드를 작성해주세요 WITH ranked AS ( SELECT ID, PERCENT_RANK() OVER (ORDER BY SIZE_OF_COLONY DESC) AS rnk FROM ECOLI_DATA ) SELECT ID, CASE WHEN rnk <= 0.25 THEN 'CRITICAL' WHEN rnk <= 0.50 THEN 'HIGH' WHEN rnk <= 0.75 THEN 'MEDIUM' ELSE 'LOW' END AS COLONY_NAME FROM ranked ORDER BY ID;
SQL
복사

4. 업그레이드 할 수 없는 아이템 구하기

SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY FROM ITEM_INFO I LEFT JOIN ITEM_TREE T ON I.ITEM_ID = T.PARENT_ITEM_ID WHERE T.PARENT_ITEM_ID IS NULL ORDER BY I.ITEM_ID DESC; -- 서브쿼리 활용 SELECT I.ITEM_ID, I.ITEM_NAME, I.RARITY FROM ITEM_INFO I WHERE I.ITEM_ID NOT IN ( SELECT DISTINCT PARENT_ITEM_ID FROM ITEM_TREE WHERE PARENT_ITEM_ID IS NOT NULL ) ORDER BY I.ITEM_ID DESC;
SQL
복사

5. 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기

패턴 1: SUM(CASE WHEN 조건 THEN 1 ELSE 0 END) > 0 패턴 2: MAX(CASE WHEN 조건 THEN 1 ELSE 0 END) = 1 패턴 3(서브쿼리 없이): CASE WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) THEN ... END -- 그룹별 조건 충족 여부를 집계로 판별 SELECT CAR_ID, CASE WHEN SUM( CASE WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN 1 ELSE 0 END) > 0 THEN '대여중' ELSE '대여 가능' END AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID ASC; -- MAX 활용 SELECT CAR_ID, CASE WHEN MAX('2022-10-16' BETWEEN START_DATE AND END_DATE) = 1 THEN '대여중' ELSE '대여 가능' END AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID ORDER BY CAR_ID DESC;
SQL
복사

5. 물고기 종류 별 대어 찾기

SELECT F.ID, I.FISH_NAME, F.LENGTH FROM FISH_INFO F JOIN FISH_NAME_INFO I ON F.FISH_TYPE = I.FISH_TYPE WHERE (F.FISH_TYPE, F.LENGTH) IN ( SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE ) ORDER BY F.ID;
SQL
복사

6. 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기

SELECT MONTH(h.START_DATE) AS MONTH, h.CAR_ID, COUNT(*) AS RECORDS FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY h JOIN ( SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE START_DATE >= '2022-08-01' AND START_DATE < '2022-11-01' GROUP BY CAR_ID HAVING COUNT(*) >= 5 ) e ON e.CAR_ID = h.CAR_ID WHERE h.START_DATE >= '2022-08-01' AND h.START_DATE < '2022-11-01' GROUP BY MONTH(h.START_DATE), h.CAR_ID ORDER BY 1 ASC, 2 DESC;
SQL
복사

7. 즐겨찾기가 가장 많은 식당 정보 출력하기

SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES FROM REST_INFO R JOIN ( SELECT FOOD_TYPE, MAX(FAVORITES) AS MAX_FAV FROM REST_INFO GROUP BY FOOD_TYPE ) M ON R.FOOD_TYPE = M.FOOD_TYPE AND R.FAVORITES = M.MAX_FAV ORDER BY R.FOOD_TYPE DESC;
SQL
복사

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

SELECT I.ANIMAL_ID, I.NAME FROM ANIMAL_INS I JOIN ANIMAL_OUTS O ON I.ANIMAL_ID = O.ANIMAL_ID WHERE I.DATETIME > O.DATETIME ORDER BY I.DATETIME ASC;
SQL
복사