코딩테스트/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 코드처럼 짜는게 정답일 거 같다