카테고리:

집계 함수 (일반) , 윈도우 함수 (일반)

ANY_VALUE

그룹에서 식의 값을 반환합니다. 결과는 비결정적입니다.

구문

집계 함수

ANY_VALUE( [ DISTINCT ] <expr1> )
Copy

윈도우 함수

ANY_VALUE( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

사용법 노트

  • DISTINCT 키워드는 이 함수에 대해 지정할 수 있지만, 아무 효과가 없습니다.

  • 윈도우 함수로 사용되는 경우:

    • 이 함수는 다음을 지원하지 않습니다.

      • OVER() 절의 ORDER BY 하위 절.

      • 윈도우 프레임.

GROUP BY 문과 함께 ANY_VALUE 사용하기

ANY_VALUE는 GROUP BY 문의 성능을 단순화하고 최적화할 수 있습니다. 많은 쿼리의 일반적인 문제는 GROUP BY 절을 사용하는 쿼리의 결과에, GROUP BY 절 자체에 사용된 식 또는 집계 함수의 결과만 포함될 수 있다는 것입니다. 예:

SELECT customer.id , customer.name , SUM(orders.value)
    FROM customer
    JOIN orders ON customer.id = orders.customer_id
    GROUP BY customer.id , customer.name;
Copy

이 쿼리에서 customer.name 속성은 결과에 포함되려면 GROUP BY에 있어야 합니다. 이는 불필요하며(예: customer.id 가 고유한 것으로 알려진 경우) 계산이 더 복잡하고 느려질 수 있습니다. 또 다른 옵션은 집계 함수를 사용하는 것입니다. 예:

SELECT customer.id , MIN(customer.name) , SUM(orders.value)
    FROM customer
    JOIN orders ON customer.id = orders.customer_id
    GROUP BY customer.id;
Copy

이는 GROUP BY 절을 단순화하지만, 여전히 MIN 함수를 계산해야 하므로 추가 비용이 발생합니다.

ANY_VALUE를 사용하여 다음 쿼리를 실행할 수 있습니다.

SELECT customer.id , ANY_VALUE(customer.name) , SUM(orders.value)
    FROM customer
    JOIN orders ON customer.id = orders.customer_id
    GROUP BY customer.id;
Copy