본문 바로가기

[오라클 레퍼런스 함수] ANY_VALUE - 비결정론적인 값 반환

by ㅇㅍㅍ 2023. 7. 29.
[오라클 레퍼런스 함수] ANY_VALUE - 비결정론적인 값 반환
728x90

ANY_VALUE

 

구문

ANY_VALUE ( [ DISTINCT | ALL ] expr )

 

목적

ANY_VALUE는 expr의 단일 비결정론적인(non-deterministic) 값 하나를 반환합니다. 이 함수는 집계 함수로 사용할 수 있습니다.

GROUP BY 절이 포함된 쿼리를 최적화할 때 ANY_VALUE를 사용합니다. ANY_VALUE는 그룹 내에서 표현식의 값을 반환합니다. 이 함수는 최적화되어 첫 번째 값만 반환하도록 설계되었습니다.

이 함수는 모든 입력 행에 대한 비교가 없도록 보장하며, GROUP BY 절의 모든 열을 지정하는 필요성을 없앱니다. 값들을 비교하지 않으므로, ANY_VALUEGROUP BY 쿼리에서 MIN 또는 MAX보다 빠르게 값을 반환합니다.

 

의미론적 규칙

ALL, DISTINCT: 이 키워드들은 ANY_VALUE에서 지원되지만, 쿼리 결과에 영향을 미치지 않습니다.

expr: 표현식은 컬럼, 상수, 바인드 변수, 또는 이들을 포함하는 표현식일 수 있습니다.

표현식 내의 NULL 값은 무시됩니다.

LONG, LOB, FILE, COLLECTION을 제외한 모든 데이터 유형을 지원합니다.

LONG을 사용하면 ORA-00997 오류가 발생합니다.

LOB, FILE, COLLECTION 데이터 유형을 사용하면 ORA-00932 오류가 발생합니다.

ANY_VALUEMINMAX와 동일한 규칙을 따릅니다.

GROUP BY 사양에 기반하여 각 그룹 내의 임의의 값을 반환합니다. 그룹의 모든 행이 NULL 표현식 값을 가지면 NULL을 반환합니다.

ANY_VALUE의 결과는 결정론적이지 않습니다.

 

제약사항

XMLTypeANYDATA를 지원하지 않습니다.

 

예제 1-1 ANY_VALUE를 집계 함수로 사용하기

이 예시는 SH 스키마의 GROUP BY 쿼리에서 집계 함수로 ANY_VALUE를 사용합니다.

SELECT c.cust_id, ANY_VALUE(cust_last_name), SUM(amount_sold)
  FROM customers c, sales s
  WHERE s.cust_id = c.cust_id
  GROUP BY c.cust_id;

 

다음은 쿼리 결과의 일부를 보여줍니다.

CUST_ID  ANY_VALUE(CUST_LAST_NAME) SUM(AMOUNT_SOLD)
------- -------------------------- ----------------
   6950 Sandburg                                 78
  17920 Oliver                                 3201
  66800 Case                                   2024
  37280 Edwards                                2256
 109850 Lindegreen                              757
   3910 Oddell                                  185
  84700 Marker                                164.4
  26380 Remler                                  118
  11600 Oppy                                    158
  23030 Rothrock                                533
  42780 Zanis                                   182
...
630 rows selected.

 


출처: 오라클 레퍼런스

원문 링크: Oracle ANY_VALUE 함수 문서

 

반응형

댓글