푸잉이의 기술블로그

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

IT/SQL

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

data고수 2022. 11. 14. 18:23

문제 설명

REST_INFO 테이블에서 음식 종류별로 즐겨찾기수가 가장 많은 식당의 음식 종류, ID, 식당 이름, 즐겨찾기수를 조회하는 SQL 문을 작성해주세요. 이때 결과는 음식 종류를 기준으로 내림차순으로 정렬해주세요.

 

예시) REST_INFO TABLE

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

 

여기서 두 가지 개념만 알면 풀 수 있다!

#GROUP BY 실행 원리

GROUP BY는 같은 값을 가진 행끼리 하나의 그룹으로 뭉쳐준다. 

집계함수를 쓰기 위한 목적 하에 사용

집계함수를 사용하지 않고 기준으로 적어준 컬럼 외의 컬럼 명을 SELECT 에 적어줄 경우 기준별 가장 상단에 등장하는 ROW 값이 반환.

 

전체 REST_INFO의 값을 확인하였을 때, 

FOOD_TYPE 제일 첫 번째 입력 값인 FAVORITES 112

일식을 보면 FOOD_TYPE 제일 첫 번째 입력 값이 FAVORITES 112인 것이 확인 되었다. 

집계함수를 쓰지 않아 제일 첫 번째 입력 값이 반환 되어 그룹핑이 되어 MAX(FAVORITES)값이 아닌 게 나옴

 

#IN 구문

IN 구문은 WHERE 절 뒤에 붙어서 칼럼이 특정 값을 가지고 있는지 확인하는 용도로 사용

 

-> REST_INFO의 테이블에서 FOOD_TYPE별로  FOOD TYPE과 FAVORITE의 MAXIMUM 값과 일치한 값들만 추출한다

 

그래서 IN 구문을 톻해 MAX 값들만 비교하여 추출해야 하기 때문에 두 번째 코드 값이 맞다!! 

 

 

내가 작성한 코드 (틀린 코드) 

내가 작성한 코드

결과) 집계함수를 쓰지 않은 GROUPING 이라 제일 처음 값이 나와 틀림 (일식의 FAVORITES 값 112는 MAX값이 아님)

첫 번째 코드 결과 값

 

두 번째 코드

 

결과)

두 번째 코드 결과 값

Comments