SQL 문제

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

빙수빈수 2023. 10. 3. 12:05

https://school.programmers.co.kr/learn/courses/30/lessons/131123

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

[문제]

다음은 식당의 정보를 담은 REST_INFO 테이블입니다. REST_INFO 테이블은 다음과 같으며 

REST_IDREST_NAMEFOOD_TYPEVIEWSFAVORITESPARKING_LOTADDRESSTEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.

 

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

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

 

[코드]

SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FOOD_TYPE, FAVORITES) IN (
                                SELECT FOOD_TYPE, MAX(FAVORITES) 
                                FROM REST_INFO  
                                GROUP BY FOOD_TYPE)
ORDER BY FOOD_TYPE DESC;

 

[고찰]

 처음에 FOOD_TYPE 별로 GROUP을 묶는 방식으로 단순하게 풀었지만 오답처리를 받았다. 그 이유를 찾아보니 그룹을 FOOD_TYPE으로만 묶게되면 각 음식타입의 첫번째 칼럼을 가져오므로 즐겨찾기 수가 가장 많은 칼럼을 구할 수 없다는 문제가 생긴다.

 어떻게 풀어야 할지 감이 잡히지 않아 다른 사람의 코드를 참고했는데 생각보다 복잡한 문제였다. 이번 문제는 서브쿼리를 사용하는 문제로 서브쿼리 내에서 음식별로 즐겨찾기가 가장 많은 수를 구해야 했다. 서브쿼리를 사용하여 FOOD_TYPE과 MAX(FAVORITES) 두 개의 컬럼으로 그룹을 묶으면 위의 문제를 해결할 수 있었다.