[프로그래머스 ORACLE SQL]서울에 위치한 식당 목록 출력하기★TO_CHAR()의 'FM9.00' 활용하기★VER3.0★LEFT_JOIN★RIGHT JOIN
https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
REST_INFO와 REST_REVIEW 테이블에서 서울에 위치한 식당들의 식당 ID, 식당 이름, 음식 종류, 즐겨찾기수, 주소, 리뷰 평균 점수를 조회하는 SQL문을 작성해주세요. 이때 리뷰 평균점수는 소수점 세 번째 자리에서 반올림 해주시고 결과는 평균점수를 기준으로 내림차순 정렬해주시고, 평균점수가 같다면 즐겨찾기수를 기준으로 내림차순 정렬해주세요.
VERSION 3.0
SELECT * FROM (
SELECT A.REST_ID , A.REST_NAME AS REST_NAME , A.FOOD_TYPE AS FOOD_TYPE,
A.FAVORITES AS FAVORITES , A.ADDRESS AS ADDRESS , ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO A LEFT JOIN
REST_REVIEW B
ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID , A.REST_NAME , A.FOOD_TYPE , A.FAVORITES , A.ADDRESS
HAVING A.address LIKE '서울%'
ORDER BY ROUND(AVG(B.REVIEW_SCORE),2) DESC , A.FAVORITES DESC)
WHERE SCORE IS NOT NULL
-- SELECT * FROM REST_INFO -- rest_id가 25개 , rest_name이 각각 따로따로
--FULL OUTER JOIN 할때 review_score가 없는것이 있다. 이는 테이블 REST_REVIEW에 해당 REST_ID와 REVIEW_SCORE가 존재하지 않는것이다.
--따라서 REST_REVIEW를 기준으로 JOIN을 진행해야 할거 같다. RIGHT JOIN을 해보자 일단
==> FULL OUTER JOIN 할때 review_score가 없는 것이 있따. 이는 REST_INFO 테이블에 있는것이 REST_REVIEW테이블에 없을 수 있다는 뜻!! 따라서 REST_INFO로의 LEFT JOIN 처리하는 것이 좋다!!!
VERSION 2.0
SELECT A.REST_ID AS REST_ID , A.REST_NAME AS REST_NAME , A.FOOD_TYPE AS FOOD_TYPE,
A.FAVORITES AS FAVORITES , A.ADDRESS AS ADDRESS , ROUND(AVG(B.REVIEW_SCORE),2) AS SCORE
FROM REST_INFO A RIGHT JOIN
REST_REVIEW B
ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID , A.REST_NAME , A.FOOD_TYPE , A.FAVORITES , A.ADDRESS
HAVING A.address LIKE '서울%'
ORDER BY ROUND(AVG(B.REVIEW_SCORE),2) DESC , A.FAVORITES DESC
VERSION 1.0
SELECT LPAD(A.REST_ID , 5 , '0') AS REST_ID , A.REST_NAME AS REST_NAME , A.FOOD_TYPE AS FOOD_TYPE,
A.FAVORITES AS FAVORITES , A.ADDRESS AS ADDRESS , TO_CHAR(ROUND(AVG(B.REVIEW_SCORE),3),'fm9.00') AS REVIEW_SCORE
FROM REST_INFO A RIGHT JOIN REST_REVIEW B ON A.REST_ID = B.REST_ID
GROUP BY A.REST_ID , A.REST_NAME , A.FOOD_TYPE , A.FAVORITES , A.ADDRESS
HAVING address LIKE '서울%'
ORDER BY AVG(B.REVIEW_SCORE) DESC , A.FAVORITES DESC
==> LPAD(열이름 , 칸갯수 , 빈공간채울거)
==>TO_CHAR(ROUND(AVG(B.REVIEW_SCORE,3), 'FM9.00')
-> B.REVIEW_SCORE의 평균값을 소숫점 3자리에서 반올림
-> TO_CHAR함수에서 FM9.00 ==> 소숫점 앞에값 한자리수이고, 소숫점은 두자리까지 출력 ==> 정수 4 ==> 4.00
-> 14 ==> FM99.00으로 해야한다.
'SQL > SELECT' 카테고리의 다른 글
[프로그래머스 ORACLE SQL]3월에 태어난 여성 회원 목록 출력하기★IS NOT NULL (0) | 2023.06.21 |
---|---|
[프로그래머스 ORACLE SQL]평균 일일 대여 요금 구하기★GROUP BY★ROUND() (0) | 2023.06.21 |
[프로그래머스 ORACLE SQL]과일로만든 아이스크림 고르기★WHERE절 서브쿼리 (0) | 2023.06.21 |
[프로그래머스 ORACLE SQL]12세이하 여자환자 목록★NVL()은 SELECT절 옆에 (0) | 2023.06.21 |
[프로그래머스 ORACLE SQL]어린동물찾기★WHERE절 != 이다! (0) | 2023.06.21 |