코딩테스트/SQL 코딩테스트

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

배또가또 2023. 12. 21. 11:58

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

 

프로그래머스

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

programmers.co.kr

 


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

1) Oracle

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

 

아래 MySQL처럼 코드를 짜서 돌려보았으나 GROUP BY 오류가 났다. 그래서 서브쿼리에 윈도우함수인 ROW_NUMBER를 사용하여 FOOD_TYPE으로 파티션을 나누었다

 

파티션  중 가장 즐겨찾기가 많은 데이터의 순위와 나머지 데이터를 조회하고

조회한 데이터를 테이블 삼아 순위가 1위인 데이터를 요구사항에 맞게 출력하였다. 


2) MySQL

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;
    해당하는 FAVORITES에 중복이 있어서 GROUP BY로 중복을 제거했더니 코드 자체는 통과되었으나
      약간 제대로 된 정답인지 아닌지 찜찜한 느낌이있다.

이 부분은 위의 Oracle 코드처럼 짜는게 정답일 거 같다