푸잉이의 기술블로그
[프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 본문
문제 설명
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인 것이 확인 되었다.
집계함수를 쓰지 않아 제일 첫 번째 입력 값이 반환 되어 그룹핑이 되어 MAX(FAVORITES)값이 아닌 게 나옴
#IN 구문
IN 구문은 WHERE 절 뒤에 붙어서 칼럼이 특정 값을 가지고 있는지 확인하는 용도로 사용
-> REST_INFO의 테이블에서 FOOD_TYPE별로 FOOD TYPE과 FAVORITE의 MAXIMUM 값과 일치한 값들만 추출한다
그래서 IN 구문을 톻해 MAX 값들만 비교하여 추출해야 하기 때문에 두 번째 코드 값이 맞다!!
내가 작성한 코드 (틀린 코드)

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


결과)

'IT > SQL' 카테고리의 다른 글
| [프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2022.11.16 |
|---|---|
| [프로그래머스] 없어진 기록 찾기 & JOIN 총 정리 (0) | 2022.11.15 |
| 4주차) 엑셀보다 쉬운 SQL #Subquery #Substring #Case (0) | 2022.08.08 |
| 3주차) 엑셀보다 쉬운 SQL #Join #Union (0) | 2022.07.12 |
| 2주차) 엑셀보다 쉬운 SQL #Group by - having #Order by # Null #날짜 조건#MOD (0) | 2022.07.07 |