본문 바로가기

프로그래머스 풀이/Lv 3

[프로그래머스 SQL] 즐겨찾기가 가장 많은 식당 정보 출력하기

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/131123

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

GROUP BY 에 대해 조금 더 이해할 수 있었던 문제이다.

 

GROUP BY는 어떠한 컬럼을 기준으로 모든 것을 묶는 구문이다.

 

REST_IDREST_NAMEFOOD_TYPEVIEWSFAVORITESPARKING_LOTADDRESSTEL

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

 

이 테이블에서 음식 타입으로 묶으면

 

은돼지 한식

하이가쯔네 일식

따띠따띠뜨 양식

 

이렇게 그룹화된다. 그리고 SUM, MAX 등 함수를 사용할 수 있는데, 중요한 건 그룹함수를 통해 값을 가져올 순 있지만 이미 테이블은 위처럼 만들어져있기 때문에 MAX 값에 대한 다른 컬럼은 가져올 수가 없다.

 

그래서 각 그룹의 최댓값을 가져와 그 값의 다른 컬럼도 출력하고 싶다면 서브쿼리를 사용해야한다.

 

-- 코드를 입력하세요
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;