[MySQL] 프로그래머스 즐겨찾기가 가장 많은 식당 정보 출력하기
2023. 1. 17.
반응형

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

 

프로그래머스

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

programmers.co.kr

 

1. 서론

 

약간 복잡하긴 한데 그렇게 어려운 문제는 아니다. (하지만 쉽지 않다...)

 

2. 문제 풀이

 

REST_INFO: 식당의 정보를 담은 테이블

 

테이블 구조:

REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL

(식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호)

 

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

 

음식종류별로 즐겨찾기 수가 가장 많은 딱 한 식당만 출력하는 게 문제다.

그러기 위해서는 음식종류별로 즐겨찾기 수를 구해야 하고, 그중에서 가장 큰 값을 구해야 한다.

두 가지를 구해서 그 조건을 연결해야 하기 때문에 서브쿼리를 사용했다.

 

먼저 그룹별로 최고 즐겨찾기 값이 제일 큰 값을 구하고

그 값과 그룹별로 출력할 때 즐겨찾기 값이 같은 것을 매치시켜 그 컬럼을 조건에 맞춰서 출력한다.

 

 

반응형

 

 

3. 코드 설명

 

select r.food_type, rest_id, rest_name, favorites
from rest_info r, (select food_type, max(favorites) as f from rest_info group by food_type) x
where r.favorites = x.f
group by food_type
order by food_type desc;

 

서브쿼리를 이용해 음식종류 그룹별로 favorites의 최댓값을 구했다.

그리고 그 값과 즐겨찾기의 값이 일치하는 컬럼을 선택해 출력했다.

 

 

반응형

 

 

틀린 코드

 

select food_type, rest_id, rest_name, max(favorites) as favorites
from rest_info
group by food_type
order by food_type desc;

 

이 코드로 돌리면 테케는 위의 코드와 똑같이 나오는데 다른 케이스에서 틀리는지 틀렸다고 나온다.

왜냐하면 이 코드는 언뜻 맞을 수도 있으나 favorites의 값 중 최댓값을 구하기 때문에 food_type별 최댓값이 아닐 수도 있기 때문이다.

아니면 그 값이 여러 개이거나?

(추측임)

 

 

 

 

반응형
myoskin