문제
테이블 관계
일대다(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
'Database > Mysql' 카테고리의 다른 글
[MYSQL] 프로그래머스 - 경기도에 위치한 식품창고 목록 출력하기 (0) | 2024.10.03 |
---|---|
[TS] this is incompatible with sql_mode=only_full_group_by 해결 방법 (1) | 2024.10.01 |