현재

[level 3] 즐겨찾기가 가장 많은 식당 정보 출력하기(★☆☆) 본문

DataBase/프로그래머스SQL문제(oracle)

[level 3] 즐겨찾기가 가장 많은 식당 정보 출력하기(★☆☆)

AAAge 2023. 11. 22. 21:56

# [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