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

박경희·2025년 2월 27일

코딩테스트

목록 보기
60/69

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

왜 GROUP BY가 필요할까?

AVG(R.REVIEW_SCORE) = 집계 함수(aggregate function)
→ 집계 함수는 여러 행을 그룹으로 묶어야 의미가 있다.

예: 식당 A에 리뷰가 3개 → 평균을 내려면 그 3개를 그룹으로 묶어야 함

따라서, 반드시 GROUP BY로 "어떤 기준으로 묶을 건지" 알려줘야 한다.

GROUP BY 없이 집계 함수 쓰면 MySQL에서는 돌아가긴 하지만

sql_mode 설정에 따라 오류가 날 수도 있고, 결과가 예측 불가능해질 수 있다.

특히 다른 DB (PostgreSQL, Oracle 등)는 에러 발생한다.


SQL 표준 규칙

SELECT절에 집계 함수 외의 컬럼이 있다면,
반드시 그 컬럼은 GROUP BY에 포함돼야 한다.

0개의 댓글