ORDER BY 절을 사용하거나 사용하지 않는 파티션에 대한 분석 카운트
사용할 때 왜 다른 결과가 나오는지 이해할 수 없습니다.ORDER BY
해석상의 절COUNT
기능.
간단한 예를 사용하면 다음과 같습니다.
with req as
(select 1 as n, 'A' as cls
from dual
union
select 2 as n, 'A' as cls
from dual)
select req.*, count(*) over(partition by cls) as cnt from req;
는 다음과 같은 결과를 제공합니다.
N CLS CNT
2 A 2
1 A 2
반면에, 추가할 때는ORDER BY
분석 조항에서는 결과가 다릅니다!
with req as
(select 1 as n, 'A' as cls
from dual
union
select 2 as n, 'A' as cls
from dual)
select req.*, count(*) over(partition by cls order by n) as cnt from req;
CNT 열이 변경됨:
N CLS CNT
1 A 1
2 A 2
누가 설명 좀 해주시겠습니까?
감사해요.
첫번째로 문서 링크입니다.하지만 다소 모호합니다.
분석 절은 다음과 같이 구성됩니다.query_partition_clause
,order_by_clause
그리고.windowing_clause
. 그리고, 정말 중요한 것은windowing_clause
가
지정하지 않으면 이 조항을 지정할 수 없습니다.
order_by_clause
. 에 의해 정의된 일부 창 경계RANGE
절에서 오직 하나의 식만을 지정할 수 있습니다.order_by_clause
. "ORDER BY 절에 대한 제한 사항"을 참조하십시오.
사용할 수 없을 뿐만 아니라windowing_clause
의 기능하지 않고order_by_clause
, 그들은 서로 묶여있습니다.
windowing_clause를 완전히 생략하면 기본값은
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
.
기본 windowing 절은 running total과 같은 것을 생성합니다.COUNT
돌아온다1
첫번째 행의 경우, 창 상단과 현재 행 사이에 하나의 행만 존재하므로,2
두번째 줄 등등.
따라서 첫 번째 쿼리에는 윈도우 설정이 전혀 없지만 두 번째 쿼리에는 기본 윈도우 설정이 있습니다.
그리고 완전한 경계가 없는 창을 지정하여 첫 번째 쿼리의 동작을 시뮬레이션할 수 있습니다.
with req as
(select 1 as n, 'A' as cls
from dual
union
select 2 as n, 'A' as cls
from dual)
select req.*, count(*) over(partition by cls order by n RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as cnt from req;
네.
N CLS CNT
1 A 2
2 A 2
이것에 대해 가장 쉽게 생각할 수 있는 방법은 - 떠나는 것입니다.ORDER BY
out은 파티션의 모든 행이 서로 "병렬"되는 방식으로 "병렬"과 같습니다.실제로 명시적으로 다음을 추가하면 동일한 효과를 얻을 수 있습니다.ORDER BY
다음과 같은 조항:ORDER BY 0
(또는 임의의 일정한 식에 따라 "순서"), 또는 더 강조하면,ORDER BY NULL
.
왜 당신이 그것을.COUNT()
아니면SUM()
전체 파티션에 대한 등은 기본 윈도우 설정 조항과 관련이 있습니다.RANGE between unbounded preceding and current row
. "범위"("ROWs"와 반대)는 현재 행과 "연결"된 모든 행이 포함됨을 의미하며, 이 행 앞에 있지 않더라도 해당 행이 포함됩니다.모든 행이 묶이기 때문에 어떤 행이 "현재"인지에 관계없이 전체 파티션이 포함됨을 의미합니다.
윈도우 함수는 생략할 때 파티션 위에서 (분할 단위로) 집계를 수행합니다.ORDER BY
조항 결과는 다음과 유사할 것입니다.GROUP BY
각 행의 출력으로생략할 수도 있습니다.PARTITION BY
모든 이며, 에는 을 하는 입니다 이 입니다 이 하는 에는 을 .
를 ORDER BY
window 내에서 하고 window function은션서음로값을다고로션시룹른aof)ehorwnnnn로다(룹wt)m(lne시션nup면
에서 되지 에서 값ORDER BY
(peer)n에서 피어라고 합니다.COUNT()
총를는막의산와한를질다는질t를esyntelelserfeldtt를은l산는의
언급URL : https://stackoverflow.com/questions/41364665/analytic-count-over-partition-with-and-without-order-by-clause
'programing' 카테고리의 다른 글
펫클리닉보다 더 큰 오픈소스 스프링 샘플 프로젝트가 있습니까? (0) | 2023.09.13 |
---|---|
Android 응용 프로그램에서 텍스트 뷰의 첫 글자를 대문자로 쓰는 방법 (0) | 2023.09.13 |
#로 재미있는 표기법 (0) | 2023.09.13 |
Python 인메모리 캐시(수명 연장) (0) | 2023.09.13 |
스크롤뷰 터치 핸들링 내의 수평 스크롤뷰 (0) | 2023.09.13 |