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

2023. 9. 18. 22:41Programmers/SQL

문제 설명

 

문제

 

결과

 

이상한 문제다.

결과처럼 나오도록 쿼리를 작성했건만 그럼 답이 아니라한다.

또 지역에 대해 잘 모르면 풀기 힘든 문제이다.

난이도는 어렵지 않으나, 이런 말도 안되는 조건들이 정답이 안 나오게 한다.

 

처음 틀린 코드

1
2
3
4
5
6
7
8
9
10
11
SELECT LPAD(A.REST_ID,5,0) REST_ID, 
       A.REST_NAME, 
       A.FOOD_TYPE, 
       A.FAVORITES, 
       A.ADDRESS, 
       TO_CHAR(ROUND(AVG(B.REVIEW_SCORE),2), 'FM99.90') SCORE
FROM REST_INFO A, REST_REVIEW B
WHERE A.REST_ID = B.REST_ID
AND A.ADDRESS LIKE '%서울%'
GROUP BY A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS
ORDER BY SCORE DESC, FAVORITES DESC
cs
 

1. LPAD를 이용해 REST_ID의 왼쪽에 0이 채워지도록 했다. 

    REST_ID : 1 → 00001

 

2. TO_CHAR( , 'FM99.90')을 이용해 SCORE의 소수점 둘째자리까지 빈 곳에 0이 채워지도록 했다.

    SCORE : 4.5 → 4.50

 

3. ADDRESS LIKE '%서울%'로 서울에 위치한 식당을 조건으로 걸었다.

 

이 틀린 코드를 이용하면 오라클에서도 문제에서 제시한 결과와 같이 REST_ID, SCORE에 0을 채워서

표현할 수 있다.

 

그러나 이 코드는 정답이 아니다.

3번이 문제가 되는 이유는 울산에 있는 서울산IC가 주소로 되어있어도 조건에 해당되기 때문이다.

이걸 내가 어떻게 알아

쨌든 SUBSTR로 처리했다.

 

1,2번은 뭐가 문제인지 모르겠다. 문제 오류 아닌가

 

 

mysql / oracle - 정답코드

1
2
3
4
5
6
7
8
9
10
11
SELECT A.REST_ID, 
       A.REST_NAME, 
       A.FOOD_TYPE, 
       A.FAVORITES, 
       A.ADDRESS, 
       ROUND(AVG(B.REVIEW_SCORE),2) SCORE
FROM REST_INFO A, REST_REVIEW B
WHERE A.REST_ID = B.REST_ID
AND SUBSTR(A.ADDRESS,1,2= '서울'
GROUP BY A.REST_ID, A.REST_NAME, A.FOOD_TYPE, A.FAVORITES, A.ADDRESS
ORDER BY SCORE DESC, FAVORITES DESC
cs

 

 

mysql 결과

→ 자동으로 REST_ID, SCORE에 0이 채워진다.

 

oracle 결과

→ REST_ID, SCORE에 0이 채워지지 않는다.