8주간의 SQL 챌린지에서 배운 교훈: 창 기능 및 순위 지정
5538 단어 bigquerysql8weeksqlchallenge
👩🏼💻 using Google BigQuery SQL syntax
📁 check the Github repository for context
오랫동안 저는 SQL의 WINDOW 함수와 사랑/증오 관계를 유지해 왔지만 최근에 마침내 빛을 보기 시작한 순간을 가졌습니다.
DENSE_RANK
RANK
및 ROW_NUMBER
는 보다 강력한 WINDOW 기능 중 하나이며 사용 사례에 맞는 올바른 선택을 하기 위해 어떻게 다르게 작동하는지 이해하는 것이 중요합니다.프레임을 구성하는 데 도움이 되는 예를 자세히 살펴보겠습니다.
아래 쿼리 ...
SELECT
s.customer_id,
s.order_date,
m.product_name,
ROW_NUMBER () OVER (PARTITION
BY customer_id ORDER BY order_date ASC) AS row_number,
RANK () OVER (PARTITION
BY customer_id ORDER BY order_date ASC) AS rank,
DENSE_RANK () OVER(PARTITION
BY customer_id ORDER BY order_date ASC) AS dense_rank
FROM sqlchallenge_week1.sales AS s
JOIN sqlchallenge_week1.menu AS m
ON s.product_id = m.product_id
ORDER BY customer_id;
... 아래 출력을 생성합니다.
위의 이미지에서 WINDOW 함수가 실제로 어떻게 작동하고 표준 AGGREGATE 함수와 어떻게 다른지 알 수 있습니까?
테이블의 예를 보면 결과가 그룹화되지 않았음을 알 수 있습니다. 즉, 같은 양의 행(14)이 들어와 나갔습니다. 이것이 WINDOW functions (분석 함수라고도 함)이 AGGREGATE functions과 다른 점입니다. 이 예제의 경우 COUNT()와 같은 AGGREGATE 함수는 고객 ID당 모든 행을 그룹화한 다음 각 그룹의 행 수를 계산하고 고객 ID당 단일 값을 반환하여 아래 출력을 생성합니다.
이제 WINDOW 함수로 돌아가서
RANK
, DENSE_RANK
및 ROW_NUMBER
가 서로 어떻게 다른지 살펴보겠습니다.ROW_NUMBER
파티션 또는 창의 모든 행에는 정렬된 파티션의 첫 번째 행인 1부터 시작하는 번호가 할당됩니다. 창의 모든 행에 고유한 번호가 할당되고 해당 번호의 순서가 1씩 증가하는 순서임을 알 수 있습니다.
RANK
파티션 또는 창의 각 행에 번호를 할당할 때 ROW_NUMBER와 동일한 논리를 따릅니다. 유일한 차이점은 동일한 주문 날짜의 행이 동일한 순위 번호를 받고 다음 하위 집합의 모든 행에 대한 순위 번호가 1씩 증가하지 않고 1 + 이전 하위 집합의 행 수라는 것입니다.
DENSE_RANK
DENSE_RANK의 경우 파티션의 하위 집합에 있는 모든 행에는 다음 하위 집합에 대해 1씩 증가하는 고유 번호가 할당됩니다.
도움이 되셨기를 바랍니다. 질문이 있으면 댓글로 알려주세요.
📚 Windows 기능에 대한 보다 폭넓은 보기를 위해 다음 블로그 게시물을 추천할 수 있습니다.
An Easy Guide to Advanced SQL Window Functions
Take your SQL from Good to Great: Part 4 (Window Functions)
Reference
이 문제에 관하여(8주간의 SQL 챌린지에서 배운 교훈: 창 기능 및 순위 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/meerens/lessons-learnt-from-the-8-week-sql-challenge-window-functions-ranking-1c54텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)