본문 바로가기

Database/Mysql

[MYSQL] 프로그래머스 - 서울에 위치한 식당 목록 출력하기

문제

 

 

테이블 관계

일대다(1:N) 관계의 테이블

식당 : 식당 리뷰 = 1 : N

핵심

1. 리뷰 평균 점수
2. 소숫점 세 번째 자리에서 반올림
3. 정렬: 첫 번째 기준으로 정렬, 단 첫 번째 기준이 같다면 두 번째 기준으로 정렬

 



1. 평균 점수

select avg(식당_리뷰.점수)
from 식당
join 식당_리뷰
on 식당.id = 식당_리뷰.식당_id
group by 식당id

 

2. 소숫점 세 번째 자리에서 반올림

select round(식당_리뷰.점수, 2)
from 식당_리뷰

 

3. 정렬: 첫 번째 기준으로 정렬, 단 첫 번째 기준이 같다면 두 번째 기준으로 정렬

select *
from 식당_리뷰
order by 첫 번째 기준, 두 번째 기준

 

 

* 주의할 점

기준 컬럼의 순서가 어플리케이션에서 정렬하는 것과 차이가 있다.

 

반복문을 통해 정렬을 하는 경우에 동일 조건이었다면

두 번째 기준으로 정렬 후 첫 번째 기준으로 정렬을 해야 한다.

 

하지만 mysql 쿼리의 경우에는 자동으로 첫 번째 기준이 같은 경우에는 두 번째 기준으로 정렬을 해준다.

따라서 기준 컬럼이 순서대로 오면 된다.

 

 


정답

SELECT ri.rest_id, ri.rest_name, ri.food_type, ri.favorites, ri.address, round(avg(rr.review_score), 2) as score 
FROM rest_info ri
join rest_review rr 
on ri.rest_id = rr.rest_id
where ri.address like '서울%'
group by ri.rest_id
order by score desc, ri.favorites desc