-
프로그래머스_즐겨찾기가 가장 많은 식당 정보 출력하기스파르타/TIP 2023. 11. 30. 14:45
문제 : REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해 주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해 주세요.
문제를 보고 아래와 같이 쉽게 코딩을 하였다.
SELECT FOOD_TYPE , REST_ID , REST_NAME , max(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE ORDER BY FOOD_TYPE desc1
바로 틀려버렸다....!
분명 나의 머릿속에는
음식 종류 ( food_ type) 별 즐겨찾기가 많은 순(max(favorites))을 하면
답이 나올 거라고 생각했다.
하지만 이는 매우 1차원적인 생각이었다.
질문하기 버튼을 눌러 나의 문제가 무엇인지, 다른 사람들도 같은 생각을 하였는지
궁금하여 여러 개를 둘러보니 사람은 다 비슷한 생각을 하나보다
나와 같은 질문이 많았고 문제점도 발견하였다.
group by를 food_type으로 했을 때 restid, rest_name이 max(favorites)인 row인지 아닌지 정확히 확신할 수 없습니다.라는 말을 찾게 되었다.
즉, 내가 생각한 max(favorites)는 food_type에는 만족하지만
우리가 조회하려는 다른 row들은 이 조건을 만족하지 않을 수 도 있다
왜?!?!
우리가 조회하려는 restid, restname은 group by로 묶이고
제일 첫 번째 로우가 가져와지기 때문에 max(favorites)랑 restid, restname이 일치 안 할 수도 있습니다.세상에 천재는 많구나 라는 생각이 들었다.
따라서 우리가 생각한 조건을 서브 쿼리로 넣어 미리 찾아버리고
조회하려는 row와 일치시키는 과정을 하면 답이 나온다.
select a.food_type ,b.rest_id , b.rest_name, a.FAVORITES from ( select food_type,max(FAVORITES) FAVORITES from rest_info group by 1 ) a join rest_info b on a.food_type = b.food_type and a.FAVORITES = b.FAVORITES order by 1 desc
이렇게 한 층 성장해 갑니다~
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131123
23-11-30
'스파르타 > TIP' 카테고리의 다른 글
태블로 집계식 (0) 2024.06.14 2/2 (1) 2024.02.05 프로그래머스 - 루시와 엘라 찾기 (0) 2023.11.29 MYSQL 소소한 팁 (2) 2023.11.28