ANY_VALUE¶
그룹에서 식의 값을 반환합니다. 결과는 비결정적입니다.
구문¶
집계 함수
ANY_VALUE( [ DISTINCT ] <expr1> )
윈도우 함수
ANY_VALUE( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
사용법 노트¶
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;
이 쿼리에서 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;
이는 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;