세조목

SQL 예제 정리(프로그래머스 - '즐겨찾기가 가장 많은 식당 정보 출력하기') 본문

데이터 분석 공부/SQL

SQL 예제 정리(프로그래머스 - '즐겨찾기가 가장 많은 식당 정보 출력하기')

세조목 2024. 5. 1. 21:33

최종 프로젝트가 끝이 나서 한동안 풀지 못했던 SQL 예제들을

처음부터 다시 복습하는 시간을 가지려하고,

그 중에서 푸는데 오래 걸렸던 문제들 위주로 정리할 예정입니다.

즐겨찾기가 가장 많은 식당 정보 출력하기

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

 

프로그래머스

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

programmers.co.kr

문제는 심플합니다.

음식종류별로 즐겨찾기수가 가장 많은 식당을 찾아내는 문제입니다.

 

처음에 저는 MAX를 사용했었는데요,

이상하게 MAX로는 음식종류별로 즐겨찾기수가 가장 많은 식당을 뽑아낼 수 없었습니다.

그래서 RANK OVER  function을 사용했습니다.

SELECT A.FOOD_TYPE,
       A.REST_ID,
       A.REST_NAME,
       A.FAVORITES
FROM
(
SELECT FOOD_TYPE,
       REST_ID,
       REST_NAME,
       FAVORITES,
       RANK() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) RANKING
FROM REST_INFO
) A
WHERE A.RANKING = 1
ORDER BY A.FOOD_TYPE DESC;

FROM절에 RANK OVER function을 활용한 서브쿼리문이 들어가 있습니다.

이렇게 서브쿼리문을 넣어놓으면

본 쿼리의 WHERE절에서 RANK가 1인 녀석들만 필터링하면 됩니다.

본 쿼리 SELECT 절에는 문제에서 출력하라고 했던

'음식 종류', '레스토랑 ID', '레스토랑 이름', '즐겨찾기 수'를 넣어줍니다.