[SQL] 서브테이블 JOIN 연습

Hyunjun Kim·2024년 10월 8일
0

SQL

목록 보기
12/44

문제 설명

다음은 식당의 정보를 담은 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문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순 정렬해주세요.

오답코드

SELECT FOOD_TYPE,REST_ID,REST_NAME,MAX(FAVORITES) FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY 1 DESC

이렇게 하면 이게 어찌 됨. 그래서 안됨.

정답코드

SELECT T1.FOOD_TYPE, T1.REST_ID, T1.REST_NAME, T1.FAVORITES
FROM REST_INFO AS T1
JOIN (SELECT FOOD_TYPE, MAX(FAVORITES) AS T2_MAX
     FROM REST_INFO
     GROUP BY FOOD_TYPE) AS T2
ON T1.FOOD_TYPE = T2.FOOD_TYPE AND T1.FAVORITES = T2.T2_MAX
ORDER BY FOOD_TYPE DESC

문제 접근

  1. 두개로 찢어서 접근. > 타입별 즐겨찾기 가장 많은 MAX(FAVORITES) 구하기
SELECT FOOD_TYPE, MAX(FAVORITES) AS T2_MAX
FROM REST_INFO
GROUP BY FOOD_TYPE
  1. 구한 MAX 값을 원래 있던 테이블에 JOIN 해서

0개의 댓글