문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131123
코드1. 서브쿼리 + 조인 사용
SELECT R1.FOOD_TYPE, R1.REST_ID, R1.REST_NAME, R1.FAVORITES
FROM REST_INFO R1
JOIN (
SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
) R2 ON R1.FOOD_TYPE = R2.FOOD_TYPE AND R1.FAVORITES = R2.FAVORITES
ORDER BY R1.FOOD_TYPE DESC;
코드2. 윈도우 함수 사용
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM (
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS TYPE_FAV_RANK
FROM REST_INFO
) INLINE_VIEW
WHERE TYPE_FAV_RANK = 1
ORDER BY FOOD_TYPE DESC;
내부 동작 순서
1. 서브쿼리(인라인뷰) 절
REST_INFO 테이블에서 FOOD_TYPE, REST_ID, REST_NAME, FAVORITES,
ROW_NUMBER() OVER (PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS TYPE_FAV_RANK를 뷰로 만든다.
(ROW_NUMBER() 함수는 PARTITION BY를 이용하여 FOOD_TYPE 별로 FAVORITES 수 에 대한 내림차순 순위를 할당하며, 컬럼 이름은 TYPE_FAV_RANK로 한다.)
FOOD_TYPE | REST_ID | REST_NAME | FAVORITES | TYPE_FAV_RANK |
분식 | 00008 | 애플우스 | 151 | 1 |
분식 | 00019 | 에버그린 | 130 | 2 |
분식 | 00018 | 가나안 | 51 | 3 |
분식 | 00025 | 별미진 | 10 | 4 |
양식 | 00003 | 따띠따띠뜨 | 102 | 1 |
양식 | 00007 | 소마바이 | 65 | 2 |
양식 | 00006 | 지아스나폴리 | 50 | 3 |
일식 | 00004 | 스시사카우스 | 230 | 1 |
일식 | 00005 | 코슌스 | 123 | 2 |
일식 | 00002 | 하이가쯔네 | 112 | 3 |
일식 | 00023 | 싹쓰리 | 42 | 4 |
중식 | 00015 | 만정 | 20 | 1 |
한식 | 00001 | 은돼지식당 | 734 | 1 |
한식 | 00020 | 신동태 | 550 | 2 |
한식 | 00010 | 맷돌우리콩감자탕 | 243 | 3 |
한식 | 00016 | 오대산산채전문점 | 230 | 4 |
한식 | 00021 | 강수곱창 | 210 | 5 |
한식 | 00011 | 부암갈비 | 150 | 6 |
한식 | 00009 | 숙성돼지 | 143 | 7 |
한식 | 00022 | 군자네 | 101 | 8 |
한식 | 00017 | 방화동쭈꾸미마을 | 80 | 9 |
한식 | 00014 | 동명항생선숯불구이 | 53 | 10 |
한식 | 00024 | 농실가찹쌀순대 | 12 | 11 |
한식 | 00012 | 만다복 | 10 | 12 |
한식 | 00013 | 은성보쌈 | 10 | 13 |
2. WHERE 절
TYPE_FAV_RANK 순위가 1인 행만 선택
3. ORDER BY 절
최종 결과를 FOOD_TYPE를 기준으로 내림차순으로 정렬
초기 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE
HAVING MAX(FAVORITES)
ORDER BY FOOD_TYPE
FOOD_TYPE | REST_ID | REST_NAME | FAVORITES |
분식 | 00008 | 애플우스 | 151 |
양식 | 00003 | 따띠따띠뜨 | 102 |
일식 | 00002 | 하이가쯔네 | 112 |
중식 | 00015 | 만정 | 20 |
한식 | 00001 | 은돼지식당 | 734 |
=>오류
'일식/ 00004 /스시사카우스/230' 출력되어야 함
오류 원인
1. HAVING 절 이해 부족
--> 집계 함수를 기반으로 조건을 걸 때 사용. MAX(FAVORITES)가 어떤 조건과 함께 사용되어야 함
2. JOIN의 ON 이해 부족
--> ON은 여러 컬럼으로 붙일 수 있다.
2. 윈도우 함수 학습 필요
ㄴ https://developevolvify.tistory.com/180
'◖코딩 테스트◗▬▬▬▬▬▬▬▬▬ > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 깃허브 자동 커밋 연동(2024) (4) | 2024.01.23 |
---|---|
[SQL KIT] (2024) 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기(설명/코드/정답) (0) | 2024.01.22 |
[SQL KIT] (2024) 오프라인/온라인 판매 데이터 통합하기(설명/코드/정답) (0) | 2024.01.18 |
[SQL KIT] (2024) 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.01.17 |
[SQL KIT] (2024) 서울에 위치한 식당 목록 출력하기 (0) | 2024.01.17 |