유미의 기록들

[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 본문

코딩테스트 기록/SQL 문제

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

지유미 2024. 8. 8. 12:02
728x90
반응형

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

 

프로그래머스

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

programmers.co.kr

 

📌 문제

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

 

 

📝풀이과정

처음에는 음식종류별로 즐겨찾기 수가 가장 많은 식당을 조회하라고 했으니 FOOD_TYPE을 GROUP BY로 하고FAVORITES을 MAX로 구하면 되겠다고 생각했다

SELECT FOOD_TYPE,REST_ID,REST_NAME, MAX(FAVORITES) AS FAVORITES FROM REST_INFO
GROUP BY FOOD_TYPE
ORDER BY FOOD_TYPE DESC

하지만 오답이 났고, 다른사람의 풀이를 찾아보았는데, MAX가 아닌 서브쿼리를 통해 각 FOOD_TYPE별로 FAVORITES의 최대값을 찾아야 한다는 것이다

 

왜 MAX() 로 되지 않을까?

 

먼저 다음 쿼리를 실행해보면

SELECT * FROM REST_INFO

REST_ID 순서로 정렬된 테이블이 나온다. 

 

여기서 FOOD_TYPE을 GROUP BY로 묶으면

SELECT * FROM REST_INFO
GROUP BY FOOD_TYPE

즐겨찾기 수가 가장 많은 식당의 정보가 아닌 테이블에서 가장 위에 있는 식당 정보를 가지고 오는 것이다

 

SELECT REST_ID, REST_NAME,FOOD_TYPE, MAX(FAVORITES) FROM REST_INFO
GROUP BY FOOD_TYPE

여기서 보면 일식에서 가장 즐겨찾기가 많은 식당은 230의 수로 스시사카우스 식당인데 위의 결과값은 하이가쯔네라는 식당이 나온다. 즉, FOOD_TYPE별로 최대값을 가져오는 것은 맞으나, 각 FOOD_TYPE별로 최대 FAVORITES을 가지는 REST_ID와 REST_NAME이 올바르게 선택되지 않는다

 

 

따라서 서브쿼리를 사용해서 각 FOOD_TYPE별로 최대 FAVORITES 값을 먼저 뽑고, 최대 FAVORITES에 해당하는 행을 WHERE문으로 찾아야 한다

SELECT MAX(FAVORITES) FROM REST_INFO GROUP BY FOOD_TYPE //서브쿼리

 

💻 정답 코드

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

일식에서 가장 즐겨찾기가 많은 식당은 230의 수로 스시사카우스 식당이 나오는 것을 확인할 수 있다!!

728x90
반응형
Comments