https://school.programmers.co.kr/learn/courses/30/lessons/131118
SCORE 컬럼으로 해야한다.ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
ADDESS 가 서울% 인 것으로 조건을 걸어도 정답이 나오지만,HAVING 에서 처리하면 성능이 더 좋다고 한다.GROUP BY 절에는 SELECT 절에서 집계 함수에 쓰인 값 이외의 모든 리스트가 포함되어야 한다. SELECT
A.REST_ID
, A.REST_NAME
, A.FOOD_TYPE
, A.FAVORITES
, A.ADDRESS,
ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
...
GROUP BY
A.REST_ID
위의 경우 ORA-00979: not a GROUP BY expression 라는 오류가 뜰 것이다.
따라서 다음과 같이 바꿔줘야 한다.
SELECT
A.REST_ID
, A.REST_NAME
, A.FOOD_TYPE
, A.FAVORITES
, A.ADDRESS,
ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
...
GROUP BY
A.REST_ID
, A.REST_NAME
, A.FOOD_TYPE
, A.FAVORITES
아래는 MySQL 기준 쿼리문이다.
SELECT
A.REST_ID
, A.REST_NAME
, A.FOOD_TYPE
, A.FAVORITES
, A.ADDRESS,
ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
FROM
REST_INFO A, REST_REVIEW B
WHERE
A.REST_ID = B.REST_ID
GROUP BY
A.REST_ID
HAVING
A.ADDRESS LIKE '서울%'
ORDER BY
SCORE DESC
, A.FAVORITES DESC
더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗