Database/PROGRAMMERS[DB]
[PROGRAMMERS] Lv.4 서울에 위치한 식당 목록 출력하기 => SELECT
임성장
2023. 12. 4. 09:38
728x90
문제
REST_INFO와 REST_REVIEW 테이블에서
서울에 위치한 식당들의
식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요.
이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고
결과는 평균점수를 기준으로 내림차순 정렬해주시고,
평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
풀이 논리 과정
- 서울에 위치한 식당들만을 추리기 위해 WHERE 절에서 필터링 해줘야 함.
- 리뷰 점수 컬럼은 REST_REVIEW 테이블에만 있기 때문에 JOIN을 사용해야 함.
- 소수점 3번째 자리에서 반올림 해주기 위해서는 ROUND 함수를 사용해야 함.
- 각 식당의 평균 리뷰 점수를 출력하기 위해 기본키로 그룹화 시켜줘야 함.
- 그룹화 시켜주지 않으면 단 하나의 레코드만을 출력함.
- 계산한 평균점수와 즐겨찾기수 컬럼을 통해 내림차순 정렬을 함.
풀이
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한 자릿수를 입력하면 됨.
- 올림 (CEIL 또는 CEILING)
- GROUP BY와 집계 함수
- GROUP BY 없이 집계 함수를 사용하면 전체 결과 집합에 대한 집계가 수행됨.
- 이는 모든 행이 하나의 그룹으로 간주되어 집계 함수가 그룹 전체에 대해 계산됨.
- GROUP BY를 사용하면 특정 열(또는 열의 조합)을 기준으로 결과를 그룹화할 수 있음.
- 그래서 그룹화된 모든 컬럼들이 출력됨.
728x90