
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.ADDRESS LIKE "서울%"
GROUP BY
I.REST_ID,
I.REST_NAME
ORDER BY
SCORE DESC, I.FAVORITES DESC
▶ AVG(R.REVIEW_SCORE) = 집계 함수(aggregate function)
→ 집계 함수는 여러 행을 그룹으로 묶어야 의미가 있다.
예: 식당 A에 리뷰가 3개 → 평균을 내려면 그 3개를 그룹으로 묶어야 함
따라서, 반드시 GROUP BY로 "어떤 기준으로 묶을 건지" 알려줘야 한다.
GROUP BY 없이 집계 함수 쓰면 MySQL에서는 돌아가긴 하지만
sql_mode 설정에 따라 오류가 날 수도 있고, 결과가 예측 불가능해질 수 있다.
특히 다른 DB (PostgreSQL, Oracle 등)는 에러 발생한다.
SELECT절에 집계 함수 외의 컬럼이 있다면,
반드시 그 컬럼은 GROUP BY에 포함돼야 한다.