코딩 테스트(Coding Test)/프로그래머스

[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 - MySQL

잇트루 2023. 6. 8. 00:52
반응형

문제 설명

다음은 식당의 정보를 담은 REST_INFO 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.

Column name Type Nullable
REST_ID VARCHAR(5) FALSE
REST_NAME VARCHAR(50) FALSE
FOOD_TYPE VARCHAR(20) TRUE
VIEWS NUMBER TRUE
FAVORITES NUMBER TRUE
PARKING_LOT VARCHAR(1) TRUE
ADDRESS VARCHAR(100) TRUE
TEL VARCHAR(100) TRUE

 

 

문제

REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해 주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해 주세요.

 

 

예시

REST_INFO 테이블이 다음과 같을 때

REST_ID REST_NAME FOOD_TYPE VIEWS FAVORITES PARKING_LOT ADDRESS TEL
00001 은돼지식당 한식 1150345 734 N 서울특별시 중구 다산로 149 010-4484-8751
00002 하이가쯔네 일식 120034 112 N 서울시 중구 신당동 375-21 NULL
00003 따띠따띠뜨 양식 1234023 102 N 서울시 강남구 신사동 627-3 1F 02-6397-1023
00004 스시사카우스 일식 1522074 230 N 서울시 서울시 강남구 신사동 627-27 010-9394-2554
00005 코슌스 일식 15301 123 N 서울특별시 강남구 언주로153길 010-1315-8729

 

SQL을 실행하면 다음과 같이 출력되어야 합니다.

FOOD_TYPE REST_ID REST_NAME FAVORITES
한식 00001 은돼지식당 734
일식 00004 스시사카우스 230
양식 00003 따띠따띠뜨 102

 

 

코드

WITH TEMP AS (
    SELECT FOOD_TYPE,
        MAX(FAVORITES) AS MAX
    FROM REST_INFO
    GROUP BY FOOD_TYPE
)
SELECT R.FOOD_TYPE,
    R.REST_ID,
    R.REST_NAME,
    R.FAVORITES
FROM REST_INFO R
INNER JOIN TEMP T ON R.FOOD_TYPE = T.FOOD_TYPE
WHERE R.FAVORITES = MAX
ORDER BY R.FOOD_TYPE DESC;

WITH 절

REST_INFO 테이블에서 FOOD_TYPE을 기준으로 그룹화하여 FOOD_TYPE과 FAVORITES의 가장 큰 값을 조회할 때 생성되는 테이블을 TEMP라는 이름의 테이블로 정의한다. WITH 절로 정의한 TEMP 테이블은 다음과 같은 형태로 조회된다.

FOOD_TYPE MAX
한식 734
일식 230
양식 102
분식 151
중식 20

 

SELECT ~ FROM 절

REST_INFO 테이블의 FOOD_TYPE, REST_ID, REST_NAME, FAVORITES를 조회한다.

 

JOIN ON 절

REST_INFO 테이블(R)과 TEMP 테이블(T)을 INNER JOIN 한다. 조인 조건으로 R 테이블의 FOOD_TYPE과 T 테이블의 FOOD_TYPE이 같은 데이터를 조회한다.

 

WHERE 절

R 테이블의 FAVORITES가 T 테이블의 MAX(FAVORITES)와 같은 데이터만 조회한다.

 

ORDER BY 절

R 테이블의 FOOD_TYPE을 기준으로 내림차순 정렬한다.

반응형