JB의 이모저모
[Programmers Lv.3] 즐겨찾기가 가장 많은 식당 정보 출력하기 (MySQL) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/131123
문제 설명
다음은 식당의 정보를 담은 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 |
⭕ CODE
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
)
ORDER BY FOOD_TYPE DESC
✏️ Comment
엄청 쉽다고 느꼈는데 많이 헷갈렸다. 처음에 코드가 맞다고 생각하고 계속 돌려보다가 전체 테이블을 출력해보고 틀린 사실을 알게 되었다.
처음 짠 코드SELECT FOOD_TYPE, REST_ID, REST_NAME, MAX(FAVORITES) AS FAVORITES FROM REST_INFO GROUP BY FOOD_TYPE ORDER BY FOOD_TYPE DESC
결과
언뜻 보기에는 문제가 없어보이지만
SELECT * FROM REST_INFO
전체를 출력하는 결과물의 일부를 가져와서 확인해보면
일식 종류의 가장 좋아요가 많은 수는 230이 맞지만 레스토랑 아이디와 레스토랑 이름이 다른것을 확인 가능하고 이는 테이블의 최상단에 있는 아이디와 이름임을 확인 가능하다.
이를 해결하기 위해 서브쿼리는 사용해서 FOOD_TYPE 과 MAX(FAVORIES)를 구해서 결과가 같은 테이블만 불러왔다.
- 전체를 출력해서 결과와 비교해보는 습관을 가지자
'SQL > 프로그래머스' 카테고리의 다른 글
[Programmers Lv.4] 취소되지 않은 진료 예약 조회하기 (MySQL) (0) | 2023.10.05 |
---|---|
[Programmers Lv.3] 자동차 평균 대여 기간 구하기 (MySQL) (0) | 2023.10.05 |
[Programmers Lv.3] 조건에 맞는 사용자와 총 거래금액 조회하기 (MySQL) (0) | 2023.10.05 |
[Programmers Lv.3] 카테고리 별 도서 판매량 집계하기 (MySQL) (0) | 2023.10.05 |
[Programmers Lv.2] 성분으로 구분한 아이스크림 총 주문량 (MySQL) (0) | 2023.10.04 |