https://school.programmers.co.kr/learn/courses/30/lessons/131123
SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
FROM REST_INFO R
RIGHT JOIN (SELECT FOOD_TYPE FT, MAX(FAVORITES) FAV
FROM REST_INFO
GROUP BY FOOD_TYPE) MF
ON R.FAVORITES = MF.FAV AND R.FOOD_TYPE = MF.FT
ORDER BY FOOD_TYPE DESC;
💡 RIGHT JOIN, GROUP BY
풀이
➡️ FOOD_TYPE를 기준으로 그룹화 해줘서 최상위 1개의 항목만 출력
시도 1) 테이블을 FAVORITE 기준으로 내림차순 정렬을 서브쿼리에서 먼저 진행 한 뒤 그룹화 시작 ➡️ 효과 없음
🎯 최대값을 뽑아내기 위해 GROUP BY + MAX를 활용해야 하는데, 그러면 행 보존이 깨지므로 MAX 값들을 RIGHT JOIN을 사용해 활용
1. FOOD_TYPE을 기준으로 그룹화 하고, FAVORITES 최대값만 출력함 (SELECT에서 2열 출력)
→ 이때 FOOD_TYPE 별 최대 FAV 개수가 출력됨
2. 1번에서 뽑아낸 테이블을 기준으로 기존 테이블과 RIGHT JOIN 실행 (🔸 FOOD_TYPE, FAVORITE이 같은 데이터만)
→ 음식 종류 별로 즐겨찾기 수가 가장 많은 식당 출력 가능
3. 나머지 정보들은 원래 테이블에서 가져오면 됨
'Algorithm > Programmars' 카테고리의 다른 글
[SQL] 저자 별 카테고리 별 매출액 집계하기 - 프로그래머스[Lv.4] (0) | 2024.01.28 |
---|---|
[SQL] 조건에 맞는 사용자와 총 거래금액 조회하기 - 프로그래머스[Lv.3] (0) | 2024.01.27 |
[JAVA] 입국심사 - 프로그래머스[Lv.3] (0) | 2024.01.25 |
[SQL] 오프라인/온라인 판매 데이터 통합하기 - 프로그래머스[Lv.4] (1) | 2024.01.24 |
[SQL] 재구매가 일어난 상품과 회원 리스트 구하기- 프로그래머스[Lv.2] (1) | 2024.01.23 |