코딩테스트

25/04/19 프로그래머스 SQL 고득점 Kit

helena1129 2025. 4. 19. 16:57

1. 서울에 위치한 식당 목록 출력하기(Level 4)

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

 

-- S: 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수
-- F: REST_INFO, REST_REVIEW
-- W: 서울, 리뷰 평균점수 소수점 세 번째 자리에서 반올림
-- O: 평균점수 내림차순, 즐겨찾기수 내림차순
SELECT RI.REST_ID, RI.REST_NAME, RI.FOOD_TYPE, 
       RI.FAVORITES, RI.ADDRESS, ROUND(AVG(RR.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO RI INNER JOIN REST_REVIEW RR ON RI.REST_ID = RR.REST_ID
WHERE RI.ADDRESS LIKE '서울%'
GROUP BY RI.REST_ID
ORDER BY SCORE DESC, RI.FAVORITES DESC

 

NOTE: ROUND 작동방식 잘 확인


2. 오프라인/온라인 판매 데이터 통합하기(Level 4)

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.

 

-- S: 판매 날짜, 상품ID, 유저ID, 판매량
-- F: ONLINE_SALE, OFFLINE_SALE
-- W: 2022년 3월, OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL
-- O: 판매일 ASC, 상품ID ASC, 유저ID ASC
SELECT *
FROM
(SELECT *
FROM (SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, 
        USER_ID, SALES_AMOUNT
FROM ONLINE_SALE) ONS 
UNION ALL
SELECT *
FROM (SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, 
       NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE) OFS) SALES
WHERE YEAR(SALES_DATE)='2022' AND MONTH(SALES_DATE)='03'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

 

NOTE: UNION ALL 사용법 확인(컬럼, 컬럼명, 데이터 타입 모두 동일해야 가능)

빈 컬럼 만드는 법(NULL/' ' AS 컬럼명)