728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/131123
정답 코드
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM REST_INFO r1
WHERE FAVORITES = (
SELECT MAX(FAVORITES)
FROM REST_INFO r2
WHERE r2.FOOD_TYPE = r1.FOOD_TYPE
)
ORDER BY FOOD_TYPE DESC;
WITH RankedRestaurants AS (
SELECT *,RANK() OVER(PARTITION BY FOOD_TYPE ORDER BY FAVORITES DESC) AS Rest_Rank
FROM REST_INFO
)
SELECT FOOD_TYPE, REST_ID, REST_NAME, FAVORITES
FROM RankedRestaurants WHERE Rest_Rank = 1
ORDER BY FOOD_TYPE DESC;
SELECT T2.FOOD_TYPE, T2.REST_ID, T2.REST_NAME, T2.FAVORITES
FROM (SELECT FOOD_TYPE, MAX(FAVORITES) AS FAVORITES
FROM REST_INFO
GROUP BY FOOD_TYPE) AS T1
JOIN REST_INFO AS T2 ON
T1.FOOD_TYPE = T2.FOOD_TYPE AND T1.FAVORITES = T2.FAVORITES
ORDER BY FOOD_TYPE DESC;
RANK 함수
- 지정된 정렬 순서에 따라 순위를 매깁니다.
- 동일한 값을 가진 행들에 대해 동일한 순위를 부여하고, 이어지는 순위에서는 건너뛴 순위를 반영합니다.
PARTITION BY 구문
- 윈도우 함수의 연산을 특정 범위의 행들로 제한하는 데 사용합니다.
- 같은 파티션 내의 행들에 대해서만 함수가 적용되고, 각 파티션은 독립적으로 계산됩니다.
SELECT
DepartmentID,
EmployeeID,
Salary,
RANK() OVER(PARTITION BY DepartmentID ORDER BY Salary DESC) AS SalaryRank
FROM
Employees;
# Employees 테이블의 각 행에 대해, 해당 행이 속한 부서(DepartmentID) 내에서 급여(Salary) 순위를 계산
SELECT
SaleDate,
SaleAmount,
SUM(SaleAmount) OVER(PARTITION BY SaleDate ORDER BY SaleDate) AS CumulativeSale
FROM
Sales;
# 각 판매 날짜(SaleDate)에 대해 해당 날짜까지의 누적 판매액(CumulativeSale)을 계산
SELECT
ProductID,
SaleDate,
SaleAmount,
AVG(SaleAmount) OVER(PARTITION BY ProductID ORDER BY SaleDate ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS MovingAvgSale
FROM
Sales;
# 각 상품(ProductID)에 대해, 해당 판매 날짜(SaleDate)를 포함한 최근 3일간의 평균 판매량(MovingAvgSale)을 계산
728x90
반응형
'Problem Solving > 프로그래머스' 카테고리의 다른 글
[MySQL] 프로그래머스 276013. Python 개발자 찾기 (0) | 2024.03.02 |
---|---|
[MySQL] 프로그래머스 276035. FrontEnd 개발자 찾기 (0) | 2024.03.01 |
[MySQL] 프로그래머스 131534. 상품을 구매한 회원 비율 구하기 (0) | 2024.03.01 |
[MySQL] 프로그래머스 131533. 상품 별 오프라인 매출 구하기 (0) | 2024.03.01 |
[MySQL] 프로그래머스 59045. 보호소에서 중성화한 동물 (0) | 2024.03.01 |