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

민정·2023년 7월 11일
0

코딩테스트

목록 보기
4/5

[SQL/Programmers]

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

REST_INFO 테이블

REST_REVIEW 테이블

확인해야할 조건
1. 식당 ID, 식당 이름, 음식 종류, 즐겨찾기 수, 주소, 리뷰 평균 점수 컬럼을 가져와야 한다.
2. 리뷰 평균 점수는 소수점 세번째 자리에서 반올림
3. 식당은 서울에 위치해야 한따.
4. 평균 점수 기준 내림차순, 그 후에 즐겨찾기 수 기준 내림차순 정렬

코드

-- 코드를 입력하세요
SELECT info.REST_ID,info.REST_NAME, info.FOOD_TYPE, info.FAVORITES,info.ADDRESS, review_score.SCORE
    FROM (SELECT review.REST_ID, ROUND(AVG(review.REVIEW_SCORE),2) as SCORE 
            FROM REST_REVIEW as review 
            GROUP BY REST_ID) 
            as review_score INNER JOIN  REST_INFO as info   
    ON info.REST_ID = review_score.REST_ID
WHERE info.ADDRESS  LIKE '서울%'
ORDER BY review_score.SCORE DESC , info.FAVORITES DESC;

출력 결과

해결 방법

  1. 먼저 식당별 리뷰의 평균 점수를 구해야 한다. REST_REVIEW 테이블에서 REST_ID 를 기준으로 그룹화를 진행하고 리뷰들의 평균점수를 구한 컬럼을 가지고 온다.
  2. 식당별 평균 점수 컬럼을 계산한 테이블을 REST_INFO 테이블과 JOIN 한다. 이때 식당 ID 인 REST_ID를 기준으로 JOIN 한다.
  3. 조건으로 식당의 위치가 서울이도록 필터링해준다.
  4. 리뷰 점수를 기준으로 내림차순, 그 다음 즐겨찾기를 기준으로 내림차순 하여 정렬해준다.

기록


1. GROUP BY 로 그룹화하기
GROUP BY 는 각종 집계함수, 그룹함수와 함께 쓰이며 그룹화된 정보를 제공한다. "그룹별 정보"를 조회하는 용도로 몇 가지 집계 함수와 같이 쓰일 수 있다.

집계함수용도
max()최대값
min()최소값
median()중앙값
sum()합계
avg()평균
variance()분산
stddev()표준편차
count()관측값 수

SELECT 컬럼이름Z, 컬럼이름Y, 집계함수A(컬럼이름1), 집계함수B(컬럼이름2), ...
FROM 테이블이름
WHERE 조건절
GROUP BY 컬럼이름Z, 컬럼이름Y, ...
HAVING 그룹조건절
ORDER BY 컬럼이름Z, ... ;

위치는 WHERE 다음, HAVING 전의 자리이다.

profile
공부 기록장

0개의 댓글