현재
[level 3] 즐겨찾기가 가장 많은 식당 정보 출력하기(★☆☆) 본문
# [level 3] 즐겨찾기가 가장 많은 식당 정보 출력하기 - 131123 [문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/131123) ### 성능 요약 메모리: 0.0 MB, 시간: 0.00 ms ### 구분 코딩테스트 연습 > GROUP BY ### 채점결과 Empty ### 제출 일자 2023년 11월 3일 21:54:36 ### 문제 설명
다음은 식당의 정보를 담은 REST_INFO 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.
| Column name | Type | Nullable |
|---|---|---|
| REST_ID | VARCHAR(5) | FALSE |
| REST_NAME | VARCHAR(50) | FALSE |
| FOOD_TYPE | VARCHAR(20) | TRUE |
| VIEWS | NUMBER | TRUE |
| FAVORITES | NUMBER | TRUE |
| PARKING_LOT | VARCHAR(1) | TRUE |
| ADDRESS | VARCHAR(100) | TRUE |
| TEL | VARCHAR(100) | TRUE |
문제
REST_INFO 테이블에서 음식종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.
예시
REST_INFO 테이블이 다음과 같을 때
| 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 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
| FOOD_TYPE | REST_ID | REST_NAME | FAVORITES |
|---|---|---|---|
| 한식 | 00001 | 은돼지식당 | 734 |
| 일식 | 00004 | 스시사카우스 | 230 |
| 양식 | 00003 | 따띠따띠뜨 | 102 |
> 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
<풀이 코드>
이번문제를 풀때는 from안에 table부터 먼저 작성해서 순서대로 결과를 확인하면서 풀었다.
select food_type, max(favorites) as c
from rest_info
group by food_type
처음에는 group by 로 food_type의 중복을 제거해주고, select로 favorites가 최대값인 food_type만 정렬하였다
그리고 테이블에 A란 별칭을 붙여주고, 기존에 있던 테이블에는 B라는 별칭을 붙여주었다.(추후 조건을 정의하기위해)
그리고
where A.food_type = B.food_type
and A.c = B.favorites
라는 조건을 사용하여 방금 테이블에서 출력했던 값들이 B테이블에 일치하는경우만
B의 컬럼을 출력하는 방식으로 문제를 해결하였다.
select B.food_type, B.rest_id, B.rest_name, B.favorites
from ( select food_type, max(favorites) as c
from rest_info
group by food_type) A, rest_info B
where A.food_type = B.food_type
and A.c = B.favorites
order by B.food_type desc
'DataBase > 프로그래머스SQL문제(oracle)' 카테고리의 다른 글
| [level 1] 평균 일일 대여 요금 구하기 - 151136 + round (1) | 2023.11.24 |
|---|---|
| [level 4] 오프라인/온라인 판매 데이터 통합하기 - 131537 (2) | 2023.11.24 |
| [level 2] 재구매가 일어난 상품과 회원 리스트 구하기 - 131536 (0) | 2023.11.23 |
| [level 2] 중복 제거하기 (0) | 2023.11.22 |
| [level 2] 가격이 제일 비싼 식품의 정보 출력하기 (0) | 2023.11.22 |