LISTAGG with ORDER BY NULL이 실제로 주문 기준으로 사용하는 것은?
하게되면
SELECT LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY NULL ) AS OrderByNULL,
LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY 1 ) AS OrderByCONST,
LISTAGG( COLUMN_VALUE ) WITHIN GROUP ( ORDER BY ROWNUM ) AS OrderByROWNUM
FROM TABLE( SYS.ODCIVARCHAR2LIST( '5', '222', '4' ) );
출력은 다음과 같습니다.
ORDERBYNULL ORDERBYCONST ORDERBYROWNUM
----------- ------------ -------------
222,4,5 222,4,5 5,222,4
쿼리는 다음을 사용할 때 영숫자 정렬을 수행한 것으로 보입니다.ORDER BY비결정론적 주문()과 함께)NULL또는 상수)를 사용할 때 입력 순서를 유지했습니다.ORDER BY ROWNUM(결정론적).
설명서에는 다음과 같이 명시되어 있습니다.
order_by_clause는 연결된 값이 반환되는 순서를 결정합니다.ORDER BY 열 목록이 고유한 순서를 달성한 경우에만 함수가 결정적입니다.
order_by_clause가 여러 행에 대해 동일한 값을 나타낼 때마다 함수는 다음과 같이 동작합니다. [...] 다른 모든 분석 함수의 경우 결과는 창 규격에 따라 달라집니다.RANGE 키워드로 논리적 창을 지정하면 함수는 각 행에 대해 동일한 결과를 반환합니다.ROWS 키워드를 사용하여 물리적 창을 지정하면 결과가 결정적이지 않습니다.
제가 문서를 통해 알 수 있는 한, 비결정론적 순서는 예상되는 것입니다. 그러나 함수는 행이 처리되는 순서(일반적으로 사용되는 보기)가 아니라 영숫자 정렬을 기반으로 결정론적 출력을 제공합니다.
이는 다른 분석 함수의 동작과 다릅니다(물리적 창을 사용하는 경우).ROWS키워드):
SELECT LAST_VALUE( COLUMN_VALUE )
OVER ( ORDER BY NULL ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
AS BYNULL,
LAST_VALUE( COLUMN_VALUE )
OVER ( ORDER BY 1 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
AS BYCONST,
LAST_VALUE( COLUMN_VALUE )
OVER ( ORDER BY ROWNUM ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING )
AS BYROWNUM
FROM TABLE( SYS.ODCIVARCHAR2LIST( '5', '222', '4' ) );
이것은 모든 다른 순서에 대해 일관된 출력을 제공합니다.
BYNULL BYCONST BYROWNUM
------ ------- --------
4 4 4
4 4 4
4 4 4
다음과 같은 경우에 주문이 어떻게 적용되는지에 대한 공식 문서가 있습니까?LISTAGG비결정론적 주문을 공급받습니까?
참고: 다음의 동작ORDER BY NULL는 여기에 다음과 같이 설명합니다.
이 예제에서는 NULL 순서 절에도 불구하고 요소가 알파벳 순으로 집계되었습니다.식에 따라 일정한 ORDER를 사용하는 경우 기본 동작으로 나타납니다.
그러나 이것은 오라클이 아닌 사이트에서의 행동에 대한 논평일 뿐입니다.
이 순서는 쿼리 실행 계획, 인스턴스 구성, 데이터베이스 버전 등 여러 요소에 따라 달라질 수 있습니다.
Oracle이 데이터를 주문할 수 있는 특정 기준을 제시하지 않는 경우에는 테스트를 통해 특정 방식으로 일관되게 데이터를 정렬하는 것처럼 보이더라도 특정 주문에 의존할 수 없습니다.
listagg에 대한 Oracle 설명서에 따르면 다음과 같습니다.
- order_by_clause는 연결된 값이 반환되는 순서를 결정합니다.ORDER BY 열 목록이 고유한 순서를 달성한 경우에만 함수가 결정적입니다.
언급URL : https://stackoverflow.com/questions/35747417/what-does-listagg-with-order-by-null-actually-use-as-the-order-criteria
'programing' 카테고리의 다른 글
| 판다 왼쪽 바깥쪽 조인 결과 왼쪽 테이블보다 큰 테이블이 나타남 (0) | 2023.09.16 |
|---|---|
| 문자열에서 텍스트 추출 (0) | 2023.09.16 |
| DIV를 선택할 수 없게 만드는 방법이 있습니까? (0) | 2023.09.16 |
| 개체가 존재하지 않는 경우 Springdata-repository의 삭제 방법에 예외를 두지 않도록 하려면 어떻게 해야 합니까? (0) | 2023.09.16 |
| Android에서 다시 로드 작업 (0) | 2023.09.16 |