프로그래머스 SQL 고득점 킷 서울에 위치한 식당 목록 출력하기

hysss·2023년 2월 14일
0

SELECT - 서울에 위치한 식당 목록 출력하기

문제 분석

REST_INFO와 REST_REVIEW 테이블에서
서울에 위치
식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요.
이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고
결과는 평균점수를 기준으로 내림차순 정렬해주시고,
평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.

코드

SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, SCORE
FROM REST_INFO I JOIN (SELECT REST_ID, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
                       FROM REST_REVIEW
                       GROUP BY REST_ID) R ON I.REST_ID=R.REST_ID
WHERE ADDRESS LIKE '서울%'
ORDER BY SCORE DESC, FAVORITES DESC;

이전 코드

SELECT I.REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) AS SCORE
FROM REST_INFO I JOIN REST_REVIEW R ON I.REST_ID=R.REST_ID
WHERE ADDRESS LIKE '서울%'
GROUP BY I.REST_ID
ORDER BY SCORE DESC, FAVORITES DESC;

문제 풀이

WHERE절에서 ADDRESS LIKE '%서울%'로 했다가 틀린 문제였다.
'인천광역시 계양구 계산동 350-10 서울빌딩 3층'과 같은 경우가 있을 수 있어서 틀린 조건문이었다.

그리고 원래는 서브 쿼리를 사용하지 않고 SQL문을 작성했었는데, SELECT 절에는 GROUP BY 절에서 등장했던 attribute나 집계 함수가 적용된 값만 나올 수 있다는 것을 기억하고 위의 정답 코드처럼 바꾸었다.

그런데 왜인지 모르겠지만 SELECT절에 GROUP BY 절에서 등장하지 않았던 attribute를 사용했는데 정답 처리가 됐었다.
찾아 보니 MySQL은 GROUP BY에서 나오지 않았던 attribute를 사용하면 결과값을 임의 처리해서 출력한다고 한다. 다른 상용 DBMS는 실행 자체가 되지 않는다고 한다.

profile
매일 매일 규칙적으로

0개의 댓글

관련 채용 정보