https://school.programmers.co.kr/learn/courses/30/lessons/131118
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
식당의 정보와 리뷰 정보가 담긴 2개의 테이블이 있다. 이 2개의 테이블을 적절히 조인하여
서울에 위치한 식당 ID, 식당 이름, 음식 종류, 즐겨 찾기 수, 주소, 리뷰 평균 점수를 조회하는 SQL 문을 작성하는 것이다.
조건은 리뷰 평균 점수는 소수점 세번째 자리에서 반올림, 결과는 평균 점수 기준 내림차순, 즐겨찾기 수 기준 내림차순 이다.
이 문제를 풀기 위해서는 Join을 알아야 한다.
Join 에는 inner join, outer join, natural join 등이 있는데 더 세부적으로 들어가면
outer join 에는 left join, right join 이 있다.
Inner Join : 두 테이블 모두에 데이터가 존재하여야함.
natural join : 공통된 컬럼을 기준으로 공통된 컬럼의 값이 같은 경우를 모두 검색함
-> 반드시 두 테이블 간의 동일한 이름, 타입을 가진 컬럼이 필요함. 이름이 같지만 타입이 다른 컬럼이 있으면 에러
outer join : 공통된 행이 아니더라도 값이 없으면 null 값을 통해 유지함.
1) Full outer join (my sql은 사용이 불가하므로 left와 right를 union 해서 사용)
2) Left join : 왼쪽 테이블을 기준으로 일치하는 행만 결합.
3) Right join : 오른쪽 테이블 기준으로 일치하는 행만 결합
번외) Cross Join -> 두 테이블 데이터의 모든 조합
위의 Join 함수들을 기반으로 하여 문제 풀이 코드를 짜면 다음과 같다.
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 as i join rest_review as r on i.rest_id = r.rest_id
where address like '서울%'
group by rest_id
order by score desc, favorites desc;
round 함수에서 소숫점을 지정해줄 때는 다음과 같다
소수점 n번째 자리까지 나타내기 -> round(변환할 수, n)
'Study > SQL' 카테고리의 다른 글
SQL 고득점 Kit - Select (3월에 태어난 여성 회원 목록 출력) (0) | 2023.02.17 |
---|---|
SQL 고득점 Kit - Select (오프라인/온라인 판매 데이터 통합하기) (0) | 2023.02.17 |