https://school.programmers.co.kr/learn/courses/30/lessons/131123?language=oracle
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
테이블 정보
REST_ID | REST_NAME | FOOD_TYPE | VIEWS | FAVORITES | PARKING_LOT | ADDRESS | TEL |
00001 | 은돼지식당 | 한식 | 1150345 | 734 | N | 서울특별시 중구 다산로 149 | 010-4484-8751 |
00002 | 하이가쯔네 | 일식 | 120034 | 112 | N | 서울시 중구 신당동 375-21 | NULL |
00003 | 따띠따띠뜨 | 양식 | 1234023 | 102 | N | 서울시 강남구 신사동 627-3 1F | 02-6397-1023 |
00004 | 스시사카우스 | 일식 | 1522074 | 230 | N | 서울시 서울시 강남구 신사동 627-27 | 010-9394-2554 |
00005 | 코슌스 | 일식 | 15301 | 123 | N | 서울특별시 강남구 언주로153길 | 010-1315-8729 |
컬럼 정보
음식 종류(food_type), ID(rest_id), 식당 이름(rest_name), 즐겨찾기수(favorites)
문제 설명
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
풀이 과정
음식종류별로 즐겨찾기수가 가장 많은
서브 쿼리를 통해 음식 종류별로 즐겨찾기수가 가장 많은 컬럼을 분류해놓은 테이블이 필요한 상황
select food_type, max(favorites) max_favorites
from rest_info
group by food_type
<서브 쿼리를 통해 만들어진 테이블>
food_type | max_favorites |
한식 | 734 |
일식 | 230 |
양식 | 102 |
분식 | 151 |
중식 | 20 |
rest_info에서 위의 테이블과 food_type이 같고 favorites 가 max_favorites와 같은 컬럼들만 뽑아오면 된다.
where 절로 조건을 비교해도 되고 inner join을 통해서도 가능하다
음식 종류, ID, 식당 이름, 즐겨찾기수를 조회
select food_type, rest_id, rest_name, favorites
음식 종류를 기준으로 내림차순 정렬
order by food_type desc 로 간단히 가능!
정답
MySQL
where in을 사용한 방법
select food_type, rest_id, rest_name, favorites
from rest_info
where (food_type, favorites) in (
select food_type, max(favorites)
from rest_info
group by food_type) -- 여러개의 서브쿼리가 생기기 때문에 in으로 처리해줘야함
order by food_type desc
join 을 사용한 방법
select food_type, rest_id, rest_name, favorites
from rest_info t1
join (
select food_type, max(favorites) as favorites
from rest_info
group by food_type
) t2 -- 각 타입별 최대 favorites
on t1.favorites = t2.favorites and t1.food_type = t2.food_type
order by food_type desc
Oracle
select food_type, rest_id, rest_name, favorites
from rest_info
where (food_type, favorites) in (
select food_type, max(favorites)
from rest_info
group by food_type) -- 여러개의 서브쿼리가 생기기 때문에 in으로 처리해줘야함
order by food_type desc
MySQL 과 동일
'SQL' 카테고리의 다른 글
[SQL] 오라클(oracle), MySQL 날짜 년월 추출, 날짜 가공 (0) | 2024.02.01 |
---|---|
[SQL/SELECT] 서울에 위치한 식당 목록 출력하기 (0) | 2022.12.15 |
[SQL] 정렬 후 원하는 개수만큼 조회(상위 n개) (0) | 2022.12.08 |