Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/프로그래머스

[SQL KIT] (2024) 서울에 위치한 식당 목록 출력하기

_hyeri 2024. 1. 17. 02:23

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131118

 

답.

SELECT REST_ID,	REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS, ROUND(AVG(REVIEW_SCORE), 2) SCORE
FROM REST_INFO JOIN REST_REVIEW USING(REST_ID)
WHERE ADDRESS LIKE '서울%'
GROUP BY REST_ID
ORDER BY SCORE DESC, FAVORITES DESC

 

내부 동작 순서 

 

1. FROM 절

REST_INFO 테이블의 별칭을 I 로하고  REST_REVIEW 테이블의 별칭을 R로 하며 그 둘을 NNER JOIN 한다.   

 

2. WHERE 절

ADDRESS는 LIKE키워드와 '%'와일드카드를 사용하여 '서울'로 시작하는 모든 행을 필터링한다. 

 

3. GROUP BY 절 

REST_ID는 식당 별로 유니크하므로 그룹화할 때 사용한다. 

 

4. SELECT 절

REST_INFO 테이블의 별칭을 I로 설정하였으니, I의 REST_ID, REST_NAME, FOOD_TYPE, FAVORITES, ADDRESS 컬럼 값과 

 

REST_REVIEW테이블의 별칭을 R로 설정하였으니, R의 REVIEW_SCORE의 평균을 구하는데, ROUND함수 사용하여 반올림할 거고 2번째 자리까지는 꼭 보이도록 하며 그 컬럼의 별칭을 SCORE로 한다.  

 

5. ORDER BY 절

SCORE 컬럼값을 내림차순으로 한 뒤 SCORE 값이 같은 행은 FAVORITES 컬럼의 값을 내림차순으로 정렬한다.

 


 

초기 코드

 

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
ORDER BY SCORE DESC, I.FAVORITES DESC
REST_ID REST_NAME FOOD_TYPE FAVORITES ADDRESS SCORE
00001 은돼지식당 한식 734 서울특별시 중구 다산로 149 4.47

 

=>오류

 

 

 

오류 원인

1. 조건 중 '서울에 위치한 식당'을 놓침 --> 조건을 분해하여 살펴보는 훈련 필요 

2. GROUP BY를 사용하여 식당 별로 그룹화하지 않은 것