[프로그래머스/MySQL] 서울에 위치한 식당 목록 출력하기

지누초이·2024년 3월 27일

프로그래머스

목록 보기
9/37
post-thumbnail

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131118


노트

  • 일일 리뷰의 평균 점수를 소수 셋째 자리에서 반올림하여, 출력은 SCORE 컬럼으로 해야한다.
ROUND(AVG(B.REVIEW_SCORE), 2) AS SCORE
  • WHERE 절에 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

더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗

0개의 댓글