문제:
REST_INFO
와 REST_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. 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 전의 자리이다.