Stats & AI tech blog - '일단 시도함'

[SQL] 프로그래머스 MySQL - Lv.2 (11~20) 본문

Programming/SQL

[SQL] 프로그래머스 MySQL - Lv.2 (11~20)

justdoit ok? 2024. 9. 10. 15:01

https://school.programmers.co.kr/learn/challenges?order=recent&levels=2&languages=mysql

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

11. 재구매가 일어난 상품과 회원 리스트 구하기 (GROUP BY, HAVING)

SELECT USER_ID, PRODUCT_ID
FROM ONLINE_SALE
GROUP BY USER_ID, PRODUCT_ID
HAVING COUNT(*) > 1
ORDER BY USER_ID ASC, PRODUCT_ID DESC

 

 

12. 업그레이드 된 아이템 구하기 (SUBQUERY)

SELECT ITEM_ID, ITEM_NAME, RARITY
FROM ITEM_INFO
WHERE ITEM_ID IN (SELECT DISTINCT B.ITEM_ID
FROM ITEM_INFO A
JOIN ITEM_TREE B
ON A.ITEM_ID = B.PARENT_ITEM_ID
WHERE A.RARITY = 'RARE')
ORDER BY ITEM_ID DESC

 

 

13. ROOT 아이템 구하기 (ISNULL)

SELECT A.ITEM_ID, A.ITEM_NAME
FROM ITEM_INFO A
JOIN ITEM_TREE B
ON A.ITEM_ID = B.ITEM_ID
WHERE ISNULL(B.PARENT_ITEM_ID)
ORDER BY A.ITEM_ID

 

 

14. 조건에 맞는 아이템들의 가격의 총합 구하기

SELECT SUM(PRICE) AS TOTAL_PRICE
FROM ITEM_INFO
WHERE RARITY = 'LEGEND'

 

 

15. 조건에 부합하는 중고거래 상태 조회하기 (CASE WHEN .. THEN .. END)

SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, (
    CASE 
        WHEN STATUS = 'SALE' THEN '판매중'
        WHEN STATUS = 'RESERVED' THEN '예약중'
        WHEN STATUS = 'DONE' THEN '거래완료'
    END) AS STATUS
        
FROM USED_GOODS_BOARD 
WHERE CREATED_DATE = '2022-10-05'
ORDER BY BOARD_ID DESC

 

* CASE WHEN 조건 THEN 결과 ... END

 

 

16. 자동차 평균 대여 기간 구하기 (DATEDIFF +1)

SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE))+1,1) AS AVERAGE_DURATION
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
GROUP BY CAR_ID
HAVING AVERAGE_DURATION >= 7
ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC

 

* 기간을 구할 때는 DATEDIFF(END, START) +1 

 

 

17. 자동차 종류별 특정 옵션이 포함된 자동차 수 구하기 (LIKE)

SELECT CAR_TYPE, COUNT(CAR_ID) AS CARS
FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%시트%' -- WHERE OPTIONS REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE ASC

 

 

18. 조건에 맞는 도서와 저자 리스트 출력하기 (DATE_FORMAT)

SELECT BOOK_ID, AUTHOR_NAME, DATE_FORMAT(PUBLISHED_DATE,'%Y-%m-%d')
FROM BOOK B
LEFT JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE CATEGORY = '경제'
ORDER BY PUBLISHED_DATE ASC

 

 

19. 성분으로 구분한 아이스크림 총 주문량 

SELECT INGREDIENT_TYPE, SUM(TOTAL_ORDER) AS TOTAL_ORDER
FROM ICECREAM_INFO I
JOIN FIRST_HALF F
ON I.FLAVOR = F.FLAVOR
GROUP BY 1
ORDER BY 2

 

 

20. 진료과별 총 예약 횟수 출력하기 (LIKE)

SELECT MCDP_CD as 진료과코드, COUNT(*) as 5월예약건수
FROM APPOINTMENT
WHERE APNT_YMD LIKE '2022-05%'
GROUP BY MCDP_CD
ORDER BY 5월예약건수, 진료과코드

 

* 2022-05월으로 조건 => LIKE '2022-05%'