https://school.programmers.co.kr/learn/courses/30/lessons/131123
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
서브쿼리로도 풀 수 있지만, WINDOW 함수를 이용하는 방법도 있었다.
그건 생각도 못했음.
풀이 1. 서브쿼리
더보기
-- 코드를 입력하세요
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO
WHERE (FAVORITES, FOOD_TYPE) IN (
SELECT MAX(FAVORITES), FOOD_TYPE
FROM REST_INFO
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC
이렇게 IN 을 써서 여러 조건을 비교해서 쓸 수도 있고,
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO A
WHERE FAVORITES = (
SELECT MAX(FAVORITES)
FROM REST_INFO B
WHERE A.FOOD_TYPE = B.FOOD_TYPE
GROUP BY FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC
애초에 WHERE절 안에 A랑 B 타입을 비교해서 같은 애들만 뽑아서 쓸 수도 있는 것 같다.
풀이 2. WINDOW FUNCTION
더보기
RANK로 파티션을 걸어버리면 굳이 GROUP BY를 할 필요가 없다.
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 REST_RANK
FROM REST_INFO) AS RANK_TABLE
WHERE REST_RANK = 1
ORDER BY FOOD_TYPE DESC
'Test > SQL' 카테고리의 다른 글
[프로그래머스] MySQL Recursive CTE 동작원리 (입양 시각 구하기) (3) | 2024.10.01 |
---|---|
[프로그래머스] 상위 n개 레코드 (0) | 2024.04.23 |
[프로그래머스] 12세 이하인 여자 환자 목록 출력하기 (0) | 2024.01.30 |
[프로그래머스] 오프라인/온라인 판매 데이터 통합하기 (0) | 2024.01.29 |