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

2023. 4. 10. 10:09개발공부 기강잡자/SQL

서울에 위치한 식당 목록 출력하기

문제

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

 

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

 

프로그래머스

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

programmers.co.kr


정답코드


이 문제에서 주의해야할 점

 

1. 리뷰가 없는 식당을 출력을 원치 않는 것 같다.

처음에는 LEFT OUTER JOIN 으로 리뷰 테이블과(REST_REVIEW) 조인해서 리뷰가 없는 식당의 경우, IFNULL<c/ode>을 사용해서 0을 출력하도록 했다.

그런데 틀렸습니다!

그냥 INNER JOIN을 사용해서 리뷰 데이블에 (REST_REVIEW) 리뷰 데이터가 없는 경우 SELECT 하지 않도록 처리해야한다.

 

2. 정렬 조건 꼭 확인하기

오름차순 : ASC

내림차순 : DESC

 

3. 평균 계산한 컬럼 등은 출력 결과를 참고해서 Alias Name (AS) 지정해서 출력하기.

 

4. 서울 지역 식당으로 조건걸 때, 데이터 확인하고 조건 걸기.

처음에는 예시 데이터만 보고 서울 지역의 식당은 '서울특별시'로 시작할 것이라 생각하고 '서울특별시%'라고 SELECT 했다.

'서울특별시'가 아니라 '서울시'로 주소가 저장되어있는 경우가 있기 때문에 LIKE 조건으로 '서울%'을 걸어야 한다.

+ 다른 풀이들 보니까 LIKE 조건으로 '서울%'이 아니라, '%서울%' 이라고 하면 틀린다고 한다.

 

기억해둬야할 MySQL 문법

1. ISNULL이 아니라 IFNULL

IFNULL(column, '대체값')

: column의 값이 NULL 일 경우 '대체값' 출력

 

2. 반올림 함수 ROUND

ROUND(column, 자릿수)

: 자릿수 + 1의 자리에서 반올림한다.

👇

ROUND(3.1236, 2) → 3.12 출력 (소숫점 셋째자리에서 반올림, 둘째자리까지 출력)

ROUND(3.1236, 3) → 3.124 출력 (소숫점 넷째자리에서 반올림, 셋째자리까지 출력)

 

3. 계산간 평균(AVG) 컬럼을 Alias name으로 ORDER BY 절에서 사용가능하다.