창 기능, 시각화 - 순위
row_number
, rank
, dense_rank
및 percent_rank
로 시작하여 사용 가능한 다양한 창 함수에 대해 자세히 살펴보겠습니다.다음과 같은 항목이 있는 이전 게시물의 동일한 비용 테이블을 사용합니다.
설명
비용
버스를 타고
삼
점심
15
...
다음 예에서 창 프레임은 가장 높은 비용에서 가장 낮은 비용으로 정렬된 전체 비용 테이블이 됩니다.
SELECT
[ window function ] OVER(ORDER BY cost DESC),
expenses.description,
expenses.cost
FROM expenses
행_번호
row_number
부터 시작하겠습니다.... ROW_NUMBER() OVER(ORDER BY cost DESC), ...
모든
row_number
기능은 1부터 시작하여 프레임의 각 행에 실행 숫자를 추가하는 것입니다.행_번호
설명
비용
1
식료 잡화류
60
2
저녁
35
삼
택시
20
4
점심
15
5
점심
15
6
저녁
15
7
차 휴식
5
8
버스를 타고
4
9
버스를 타고
삼
10
버스를 타고
삼
dense_rank
dense_rank
가 더 흥미롭습니다. 이전 예를 검토하면 비용이 동일한 항목이 몇 개 있음을 알 수 있습니다. Postgres 설명서에서는 이를 피어 그룹이라고 하며 dense_rank
행 대신 그룹별로 계산되는 실행 숫자를 추가합니다.따라서 SQL을 다음과 같이 변경합니다.
... DENSE_RANK() OVER(ORDER BY cost DESC), ...
우리에게 이것을 제공합니다:
dense_rank
설명
비용
1
식료 잡화류
60
2
저녁
35
삼
택시
20
4
점심
15
4
점심
15
4
저녁
15
5
차 휴식
5
6
버스를 타고
4
7
버스를 타고
삼
7
버스를 타고
삼
참고: 실제로 Postgres가 피어 그룹 내에서 행을 정렬하는 방법을 잘 모르겠습니다. 작은 예에서는 암시적
ORDER BY ID DESC
이 추가된 것처럼 보이지만 Postgresdocs는 정렬이 아닌 경우 일반 정렬에 대해서도 말합니다. 선택하면 행이 지정되지 않은 순서로 반환됩니다 🤷♂️.계급
rank
는 dense_rank
와 한 가지 큰 차이점이 있습니다. 즉, 이전 피어 그룹의 "갭"을 계산합니다.차이점을 보여주기 위해 각 함수의 결과를 비교해 보겠습니다.
dense_rank
계급
설명
비용
1
1
...
...
2
2
...
...
삼
삼
...
...
4
4
...
...
4
4
...
...
4
4
...
...
5
7
...
...
6
8
...
...
7
9
...
...
7
9
...
...
퍼센트_랭크
이것은 흥미로운 것입니다. 그것이 파생되는 방법은 약간 복잡하므로 쿼리로 시작하여 예를 들어 보여드리겠습니다.
... PERCENT_RANK() OVER(ORDER BY cost DESC), ...
결과:
퍼센트_랭크
설명
비용
0
식료 잡화류
60
0.11...
저녁
35
0.22...
택시
20
0.33...
점심
15
0.33...
점심
15
0.33...
저녁
15
0.66...
차 휴식
5
0.77...
버스를 타고
4
0.88...
버스를 타고
삼
0.88...
버스를 타고
삼
연속 숫자 대신 0에서 1까지의 "상대 순위"를 얻습니다. 이것은 어떤 항목이 가장 높은 순위에 얼마나 가까운지 알아야 하는 경우에 유용합니다. 하지만 위의 예에서 볼 수 있듯이 가장 높은 순위에 대한 동률이 있는 경우 1로 끝나지 않을 수 있습니다(자세한 설명here ).
나란히
마지막으로 결과를 나란히 살펴보겠습니다.
행_번호
dense_rank
계급
퍼센트_랭크
설명
비용
1
1
1
0
식료 잡화류
60
2
2
2
0.11...
저녁
35
삼
삼
삼
0.22...
택시
20
4
4
4
0.33...
점심
15
5
4
4
0.33...
점심
15
6
4
4
0.33...
저녁
15
7
5
7
0.66...
차 휴식
5
8
6
8
0.77...
버스를 타고
4
9
7
9
0.88...
버스를 타고
삼
10
7
9
0.88...
버스를 타고
삼
도움이 되었기를 바랍니다. 다음은 가지고 놀 수 있는 sqlfiddle입니다.
향후 기사에서는 더 많은 창 기능을 살펴보겠습니다. 팔로우 하시면 다음 소식을 알 수 있습니다!
Reference
이 문제에 관하여(창 기능, 시각화 - 순위), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/wasabigeek/window-functions-visualized-rankings-3p4g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)