728x90

< 링크 >
여기를 클릭하세요 (프로그래머스 고득점 Kit 106문제 모음)

여기를 클릭하세요 (10. 서울에 위치한 식당 목록 출력하기)

< 문제 >
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

< 내가 작성한 코드 >
SELECT a.rest_id, a.rest_name, a.food_type, a.favorites, a.address, round(avg(b.review_score), 2) as SCORE
from rest_info a inner join rest_review b on a.rest_id = b.rest_id
where a.address like '서울%'
group by a.rest_id
order by round(avg(b.review_score), 2) desc, a.favorites desc;

< 풀이 >
1. 2개의 테이블이 주어졌고, 문제를 살펴보니 inner join이 필요하다고 생각했다.
그래서 아래와 같이 적었다.
SELECT a.rest_id, a.rest_name, a.food_type, a.favorites, a.address, round(avg(b.review_score), 2) as SCORE
from rest_info a inner join rest_review b on a.rest_id = b.rest_id

2. 특히 select에서 마지막 round 부분은
리뷰 점수에 대한 평균점수를 소수점 셋째 자리에서 반올림해야 하기 때문에
round(avg(b.review_score), 2) 라고 적어야 한다.
★ round 함수와 avg 함수의 사용법을 알고 있는 것이 중요하다.

3. 그 다음 '서울에 있는' 조건으로 아래와 같이 where 구문을 추가했다.
where a.address like '서울%'
★ 문자 % 는 서울로 시작하는 '모든' 데이터를 의미한다. 서울, 서울1, 서울33처럼 말이다.

4. 문제에서 집계함수를 사용했기 때문에 group by를 사용해야 한다.
group by를 사용해야 하는 이유는 아래 이미지에 적힌 내용과 같다.
나는 앞으로 집계함수가 있으면 일단 group by 사용을 의심, 검토하기로 했다.



5. order by 구문을 작성했다.
내림차순은 desc라고 써야 한다.

결국 내가 최종적으로 작성한 코드는 아래와 같다.
SELECT a.rest_id, a.rest_name, a.food_type, a.favorites, a.address, round(avg(b.review_score), 2) as SCORE
from rest_info a inner join rest_review b on a.rest_id = b.rest_id
where a.address like '서울%'
group by a.rest_id
order by round(avg(b.review_score), 2) desc, a.favorites desc;

+ Recent posts