Database/PROGRAMMERS[DB]

[PROGRAMMERS] Lv.4 서울에 위치한 식당 목록 출력하기 => SELECT

임성장 2023. 12. 4. 09:38
728x90

문제

REST_INFO와 REST_REVIEW 테이블에서 

서울에 위치한 식당들의 

식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 

이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 

결과는 평균점수를 기준으로 내림차순 정렬해주시고, 

평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

 

풀이  논리 과정

  1. 서울에 위치한 식당들만을 추리기 위해 WHERE 절에서 필터링 해줘야 함.
  2. 리뷰 점수 컬럼은 REST_REVIEW 테이블에만 있기 때문에 JOIN을 사용해야 함.
  3. 소수점 3번째 자리에서 반올림 해주기 위해서는 ROUND 함수를 사용해야 함.
  4. 각 식당의 평균 리뷰 점수를 출력하기 위해 기본키로 그룹화 시켜줘야 함.
    1. 그룹화 시켜주지 않으면 단 하나의 레코드만을 출력함.
  5. 계산한 평균점수와 즐겨찾기수 컬럼을 통해 내림차순 정렬을 함.

 

풀이

SELECT I.REST_ID, I.REST_NAME, I.FOOD_TYPE, I.FAVORITES, I.ADDRESS, ROUND(AVG(R.REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO I JOIN REST_REVIEW R
ON I.REST_ID = R.REST_ID
WHERE I.REST_ID IN (
    SELECT REST_ID
    FROM REST_INFO 
    WHERE ADDRESS LIKE ('서울%')
)
GROUP BY i.REST_ID
ORDER BY SCORE DESC, I.FAVORITES DESC

 

  • 올림, 반올림, 버림, ~에서, ~까지
    • 올림 (CEIL 또는 CEILING)
      • 설명: 주어진 숫자를 그보다 큰 정수로 올림합니다.
      • EX) SELECT CEIL(숫자, 소수점 자릿수);
    • 반올림 (ROUND)
      • 설명: 주어진 숫자를 가장 가까운 정수로 반올림합니다.
      • EX) SELECT ROUND(숫자, 소수점 자릿수);
    • 버림 (FLOOR)
      • 설명: 주어진 숫자를 그보다 작은 정수로 버립니다.
      • EX) SELECT FLOOR(숫자, 소수점 자릿수);
    • ~에서, ~까지
      • ~에서는 소수점 자릿수를 그대로 입력하면 됨.
      • ~까지는 소수점 자릿수 + 1한 자릿수를 입력하면 됨.

 

  • GROUP BY와 집계 함수
    • GROUP BY 없이 집계 함수를 사용하면 전체 결과 집합에 대한 집계가 수행됨. 
    • 이는 모든 행이 하나의 그룹으로 간주되어 집계 함수가 그룹 전체에 대해 계산됨.
    • GROUP BY를 사용하면 특정 열(또는 열의 조합)을 기준으로 결과를 그룹화할 수 있음.
    • 그래서 그룹화된 모든 컬럼들이 출력됨.
728x90