ANY_VALUE
目的
ANY_VALUE
は、expr
の非決定値を1つ返します。これは、集計ファンクションとして使用できます。
ANY_VALUE
を使用すると、GROUP BY
句を持つ問合せを最適化できます。ANY_VALUE
は、グループ内の式の値を返します。これは、最初の値を返すように最適化されています。
これにより、入力行に対して比較が行われないようにし、GROUP BY
句の一部としてすべての列を指定する必要もなくなります。値を比較しないため、ANY_VALUE
は、GROUP BY
問合せのMIN
またはMAX
よりも迅速に値を返します。
セマンティクス
ALL
、DISTINCT
: これらのキーワードは、ANY_VALUE
によってサポートされますが、問合せ結果に影響はありません。
expr
: 式には、列、定数、バインド変数またはこれらを含む式を指定できます。
式のNULL値は無視されます。
LONG
、LOB
、FILE
またはCOLLECTION
を除くすべてのデータ型をサポートします。
LONG
を使用すると、ORA-00997
が発生します。
LOB
、FILE
またはCOLLECTION
データ型を使用すると、ORA-00932
が発生します。
ANY_VALUE
は、MIN
およびMAX
と同じルールに従います。
GROUP BY
の指定に基づいて、各グループ内のすべての値を返します。グループ内のすべての行にNULL式の値がある場合はNULLを返します。
ANY_VALUE
の結果は決定的ではありません。
制限事項
XMLType
およびANYDATA
はサポートされていません。
例7-1 集計ファンクションとしてのANY_VALUEの使用
この例では、ANY_VALUE
をSHスキーマのGROUP BY
問合せ内で集計ファンクションとして使用します。
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;
次の問合せ結果では、最初の11行のみが表示されています。
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.