개인 공부/알고리즘
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 풀이
킴도비
2023. 2. 3. 15:07
오늘은 왜 서브쿼리를 써야 하는지 다시 한번 생각하게 되는 문제다. 아직까지는 서브쿼리를 사용하는 것에 어색하기 때문에 안쓰려고 했었던 게 있었는데 다시 잘 써보려고 노력해야할 것 같다.
📔 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
- 문제 내용
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
- 테이블

📖 문제 풀이
- 즐겨찾기 수가 제일 많은 식당
- 음식 종류, 식당 ID, 식당 이름, 즐겨찾기 수를 출력하기
- 음식종류 기준으로 내림차순
🔍 여기서 내가 했던 실수는 즐겨찾기 수가 제일 많은 식당을 찾는 것을 서브 쿼리가 아닌 그냥 SELECT 문에다가 MAX를 집어넣어서 풀었던 점이다.
- 그렇게 풀게 된다면 오답이 된다. 그래서 찾아봤던 글에 아래에 댓글 달았던 분이 친절하게 설명해 주셨다.
- 요점은 GROUP BY로 FOOD_TYPE을 그룹으로 묶었을 때 REST_ID, REST_NAME이 MAX(FAVORITES)인 ROW인지 아닌지 정확하게 확신할 수 없었기 때문이었다.
- 추가 설명해 주신 부분이 GROUP BY로 FOOD_TYPE을 진행했을 때 내가 정확하게 원하는 FOOD_TYPE의 FAVORITES라고 확신할 순 있지만 REST_ID, REST_NAME은 GROUP BY로 묶여 진 후 제일 첫번 째 로우가 가져와 지기 때문에 MAX(FAVORITES)와 REST_ID, REST_NAME이 일치하지 않을 수 있기 때문에 라고 설명해 주셨다.
- 그래서 서브 쿼리든 JOIN이든 먼저 따로 FAVORITES를 찾은 것을 REST_ID, REST_NAME에 맞게 뽑아내야 했던 것이다.
https://school.programmers.co.kr/questions/37996
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
✅ 소스 코드
-- 코드를 입력하세요
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 문제를 풀 수 있어서 좋았다 😊