SQL/프로그래머스 SQL

MySQL 프로그래머스 서울에 위치한 식당 목록 출력하기 문제 답

진리뷰 2023. 10. 25. 09:00
반응형

 

 

MySQL-프로그래머스-서울에-위치한-식당-목록-출력하기-문제-답-썸네일
서울에 위치한 식당 목록 출력하기

 

 

이 글은 프로그래머스 SQL 고득점 Kit 문제와 답을 정리한 글입니다.

*MySQL 버전입니다.

 

 

 

프로그래머스 서울에 위치한 식당 목록 출력하기 문제

 

💡식당 id, 식당 이름, 음식 종류, 즐겨찾기 수, 주소, 리뷰 평균 점수 가져오기

  • 리뷰 평균 점수: 소수 세 번째 자리에서 반올림
  • 리뷰 평균 점수 내림차순, 즐겨찾기 수 내림차순 정렬

 

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

 

 

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

 

 

 

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

 

 

💡 본 문제의 포인트: 두 테이블 조인, select 활용

select a.rest_id as REST_ID
, REST_NAME
, FOOD_TYPE
, FAVORITES
, ADDRESS
, b.avg_s as SCORE

from rest_info as a
, (select rest_id
        , round(avg(review_score), 2) as avg_s
   from rest_review
   group by rest_id) as b

where a.rest_id = b.rest_id
and a.address like "서울%"

group by a.rest_id
order by b.avg_s desc, a.favorites desc;

 


 

1. rest_review테이블에서 평균 리뷰 점수 구하기

 

# 평균 리뷰 점수 테이블
select rest_id
     , round(avg(review_score), 2) as SCORE
from rest_review
group by rest_id;

 

2. 1을 from 서브쿼리(인라인뷰)로 사용하기

  • select 활용 문제이기에, select를 최대한 사용하고자 인라인뷰로 쿼리 작성.
select a.rest_id as REST_ID
, REST_NAME
, FOOD_TYPE
, FAVORITES
, ADDRESS
, b.avg_s as SCORE

from rest_info as a
, (select rest_id
        , round(avg(review_score), 2) as avg_s
   from rest_review
   group by rest_id) as b

*서브쿼리 추천 글 MySQL 서브 쿼리 Subquery 기초 정리

 

3. 조건에 맞춰 출력하기

  • 테이블 rest_info 와 rest_review에서 서로 같은 rest_id를 가진 식당 필터링.
  • 서울 식당만 필터링하고자, a.address like "서울%" 사용.
  • 정렬 기준인 평균 리뷰 점수, 즐겨찾기수 desc 입력.

 

 

 

추가 정리

 

💡 with 사용 ver.

with b as(
select rest_id
, round(avg(review_score), 2) as avg_s
from rest_review
group by rest_id
)

select a.rest_id as REST_ID
, REST_NAME
, FOOD_TYPE
, FAVORITES
, ADDRESS
, b.avg_s as SCORE

from rest_info as a, b

where a.address like "서울%"
and a.rest_id = b.rest_id

group by rest_id
order by score desc, favorites desc;
반응형
top