프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
다음은 식당의 정보를 담은 REST_INFO
테이블입니다. REST_INFO
테이블은 다음과 같으며 REST_ID
, REST_NAME
, FOOD_TYPE
, VIEWS
, FAVORITES
, PARKING_LOT
, ADDRESS
, TEL
은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.
문제
REST_INFO
테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
예시
REST_INFO
테이블이 다음과 같을 때
SQL을 실행하면 다음과 같이 출력되어야 합니다.
풀이
기존 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
이렇게 작성하면 즐겨찾기의 가장 큰 값을 가져오는 건 맞다.
하지만 식당과 대응되지 않는 즐겨찾기의 값을 가져오기 때문에 테이블에서 가장 큰 즐겨찾기의 값을 먼저 구하고 그 값과 대응하는 식당을 조회해야한다.
때문에 WHERE
절에서 음식 유형 별 가장 큰 즐겨찾기 값을 서브쿼리를 통해 한번 찾아주고 그 값과 대응하는 식당을 유형별로 다시 조회해야한다.
최종 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE FAVORITES **IN (
SELECT MAX(FAVORITES)
FROM REST_INFO
GROUP BY FOOD_TYPE
)**
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
'🤯 코딩테스트 > SQL' 카테고리의 다른 글
[SQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.02.15 |
---|---|
[SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.02.15 |
[SQL] 가격대 별 상품 개수 구하기 (0) | 2024.02.15 |
[SQL] 입양 시각 구하기(1) (0) | 2024.02.15 |
[SQL] 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2024.02.15 |