-
프로그래머스 - 서울에 위치한 식당 목록 출력하기SQL 문제 2024. 1. 5. 15:34
서울에 위치한 식당 목록 출력하기
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요-- 코드를 입력하세요 SELECT INFO.REST_ID, INFO.REST_NAME, INFO.FOOD_TYPE, INFO.FAVORITES, INFO.ADDRESS, ROUND(AVG(REVIEW.REVIEW_SCORE),2) AS SCORE FROM REST_INFO as INFO left join REST_REVIEW as REVIEW ON INFO.REST_ID = REVIEW.REST_ID WHERE INFO.ADDRESS like '서울%' AND REVIEW.REVIEW_SCORE IS NOT NULL GROUP BY INFO.REST_ID ORDER BY SCORE DESC, INFO.FAVORITES DESC
문제의 조건에서 내가 실수한 부분은
리뷰 평균 점수를 구하는데
한 식당에 여러 리뷰가 달릴것이고, 이를 평균을 내는데
group by를 안하고 있었던 것이다.
group by를 하고 보니 평균 점수가 안나오는 식당들이 있었다.
이는 누군가가 리뷰를 안쓴것 = NULL 인것이다.
NULL은 우리가 구하려고 하는 것이 아니라서 NULL을 제외해야한다.
NULL의 연산은 NULL에 연산을 취하면 결과는 NULL이 나오기 때문에
WHRE절에 IS NOT NULL로 처리를 해주었다.
JOIN의 경우는 inner, left로 하여도 결과는 같게 나온다.
쿼리 진행 순서
1. 테이블 두개를 조인하여 데이터를 합친다.
2. score에 null인 row는 제외시킨다.
3. 식당의 id로 그룹화를 하여 한 개의 식당의 리뷰 점수를 비교한다.(REST_NAME으로 묶어도 괜찮다.)
4. select문에 있는 컬럼들을 조회하면서, 소수점 3자리에서 반올림을 시켜준다.
5. 평균 score를 내림차순 정렬, score가 같다면 favorites로 내림차순 정렬을 한다.
https://school.programmers.co.kr/learn/courses/30/lessons/131118
'SQL 문제' 카테고리의 다른 글
프로그래머스 - 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) 2024.01.08 프로그래머스 - 우유와 요거트가 담긴 장바구니 (1) 2024.01.05 프로그래머스 - 헤비 유저가 소유한 장소 (0) 2024.01.05 프로그래머스 - 자동차 평균 대여 기간 구하기 (0) 2024.01.05 프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기 (1) 2024.01.05