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

Eunding·2024년 2월 11일
0

SQL 고득점 Kit

목록 보기
10/62

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

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

문제

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

풀이

SELECT info.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO info, REST_REVIEW review
WHERE info.REST_ID = review.REST_ID
GROUP BY info.REST_ID
HAVING ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, FAVORITES DESC;
  1. 테이블명이 길어서 REST_INFO, REST_REVIEW를 각각 info, review로 별칭 지정
FROM REST_INFO info, REST_REVIEW review
  1. 두 테이블의 공통 키인 REST_ID로 같은 아이디인 데이터만 조회
WHERE info.REST_ID = review.REST_ID
  1. 리뷰 평균 점수를 소수점 세 번째 자리에서 반올림하고 소수점 둘째자리까지 나타내기(컬럼명은 SCORE로)
SELECT ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
  1. 평균 점수를 기준으로 내림차순 정렬, 평균 점수 같다면 즐겨찾기 수 기준으로 내림차순 정렬
ORDER BY SCORE DESC, FAVORITES DESC;
  1. 서울에 위치한 식당
GROUP BY info.REST_ID
HAVING ADDRESS LIKE '서울%'
  • REST_ID로 그룹 만들고 ADDRESS에 '서울'로 시작하는 주소 데이터만 조회

배운 점

GROUP BY, HAVING

SELECT info.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO info, REST_REVIEW review
WHERE (info.REST_ID = review.REST_ID)
    AND ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, FAVORITES DESC;
  • 처음에 GROUP BY 안쓰고 위 코드처럼 썼다가 틀렸다. (생각해보니까 내 코드는 모든 리뷰의 평균 점수를 구하는 코드이다)
    아무튼 식당 리뷰들의 평균 점수를 구할 때 Group By로 묶고 Having 절로 '서울'로 시작하는 걸 찾아야 한다.
    +) HAVING절은 그룹화된 데이터에 대한 필터링하기 때문에 그룹화 시키면 WHERE절보다는 HAVING절을 사용하는 게 더 옳다.
    GROUP BY 먼저 나오고 HAVING 절이 나와야 한다.

LIKE

  • 부분적으로 일치하는 컬럼을 조회

    컬럼명 LIKE 조건
    ['_'] : 글자 수를 정해줌
    ['%'] : 글자 수를 정해주지 않음

+) 참고
강원도에 위치한 생산공장 목록 출력하기

ROUND() 함수

ROUND(값, 자릿수)
값을 자릿수까지 표현

+) 참고

평균 일일 대여 요금 구하기

profile
안녕하세요~

0개의 댓글

관련 채용 정보