카테고리별 매출 순위를 매기는 걸 하다가, 원래 GROUP BY로 낑낑대던 게 윈도우 함수 쓰니까 한 방에 풀려서 오히려 원리가 궁금해졌어요.
제가 이해한 건 GROUP BY는 여러 행을 한 줄로 접어버려서 개별 행 정보(상품명 같은 거)가 사라진다는 거고요, 윈도우 함수는 행을 그대로 두면서 옆에 순위나 합계를 붙여주는 거더라고요. 예를 들면 이런 식이요.
SELECT product, category, sales,
RANK() OVER (PARTITION BY category ORDER BY sales DESC) AS rnk,
SUM(sales) OVER (PARTITION BY category) AS cat_total
FROM products;
여기서 RANK 말고 DENSE_RANK, ROW_NUMBER도 있던데 동점 처리에서 뭐가 다른 건가요? 매출이 같은 상품이 두 개 있을 때 결과가 어떻게 갈리는지 헷갈립니다. 그냥 감으로 골라 쓰고 있는데 정확히 알고 싶어요.