🗒️ 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131123
💡조건
## REST_INFO : 식당 정보
# 음식종류별로 즐겨찾기수가 가장 많은 식당 -> 음식 종류, id, 식당이름, 즐겨찾기수 조회
# 음식 종류 내림차순 DESC
✏️ 내 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC
✏️ 수정한 코드
SELECT T1.FOOD_TYPE, T1.REST_ID, T1.REST_NAME, T1.FAVORITES
FROM REST_INFO T1
JOIN (SELECT FOOD_TYPE, MAX(FAVORITES) AS T2_MAX
FROM REST_INFO
GROUP BY FOOD_TYPE) T2
ON T1.FOOD_TYPE = T2.FOOD_TYPE AND T1.FAVORITES = T2.T2_MAX
ORDER BY FOOD_TYPE DESC
📒GROUP BY에서 MAX/MIN 사용하기
첫번째 코드에서 제대로 결과가 나오지 않은 이유는 GROUP BY와 MAX를 함께 사용했기 떄문이다.
GROUP BY를 사용하여 각 FOOD_TYPE 별로 하나의 행을 반환하게 되는데 이때 REST_ID와 REST_NAME이 단일한 값이 아닌 경우로 문제가 생긴다.
SELECT FOOD_TYPE, MAX(FAVORITES) AS T2_MAX
FROM REST_INFO
GROUP BY FOOD_TYPE
- REST_INFO 테이블에서 FOOD_TYPE 별로 FAVORITES의 최대값을 구한다
- GROUP BY FOOD_TYPE 을 통해 음식 종류별로 그룹 -> MAX(FAVORITES)를 통해 각 음식 종류에서 가장 큰 'FAVORITES'값을 선택
- 해당 쿼리를 통해 T2 테이블에서 각 음식 종류별로 최고 인기도 'FAVORITES'를 가진 값을 담고 있다.
SELECT T1.FOOD_TYPE, T1.REST_ID, T1.REST_NAME, T1.FAVORITES
FROM REST_INFO T1
JOIN (서브쿼리 T2) ON 조건
ORDER BY FOOD_TYPE DESC
- T1과 T2를 조인하여 각 음식 종류별로 가장 높은 FAVORITES 값을 가진 레코드만 선택하게 된다.
😊 오늘의 후기
GROUP UP에서 집계되지 않은 컬럼을 함께 선택하려면 서브쿼리나 조인을 사용해서 조건에 맞는 특정 행을 새롭게 선택해야한다는 사실을 알게 되었다.
'💻 Coding > [Algorithm]SQL' 카테고리의 다른 글
프로그래머스 | 대장균들의 자식의 수 구하기 ⭐⭐⭐ - SQL (0) | 2024.10.17 |
---|---|
프로그래머스 | 가장 큰 물고기 10마리 구하기 ⭐ - SQL (2) | 2024.10.16 |
프로그래머스 | 3월에 태어난 여성 회원 목록 출력하기 ⭐⭐ - SQL (1) | 2024.09.30 |