https://school.programmers.co.kr/learn/courses/30/lessons/131123
[문제]
다음은 식당의 정보를 담은 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(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) 두 개의 컬럼으로 그룹을 묶으면 위의 문제를 해결할 수 있었다.
'SQL 문제' 카테고리의 다른 글
[프로그래머스_SQL] 없어진 기록 찾기 (0) | 2023.10.04 |
---|---|
[프로그래머스 SQL] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.10.03 |
[프로그래머스 SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2023.10.03 |
[프로그래머스 SQL] 카테고리 별 도서 판매량 집계하기 (0) | 2023.10.03 |
[프로그래머스 SQL] 카테고리 별 상품 개수 구하기 (0) | 2023.10.02 |