ANY_VALUE¶
グループから式の値を返します。結果は非決定的です。
構文¶
集計関数
ANY_VALUE( [ DISTINCT ] <expr1> )
ウィンドウ関数
ANY_VALUE( [ DISTINCT ] <expr1> ) OVER ( [ PARTITION BY <expr2> ] )
使用上の注意¶
この関数には DISTINCT キーワードを指定できますが、効果はありません。
ウィンドウ関数として使用する場合:
この関数は次をサポートしていません。
OVER()句のORDER BY サブ句。
ウィンドウフレーム。
ANY_VALUE と GROUP BY ステートメントの併用¶
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;