Kategorien:

Aggregatfunktionen (Allgemein), Fensterfunktionen (Allgemein)

ANY_VALUE

Gibt einen beliebigen Wert des Ausdrucks aus der Gruppe zurück. Das Ergebnis ist nicht deterministisch.

Syntax

Aggregatfunktion

ANY_VALUE( [ DISTINCT ] <expr1> )

Fensterfunktionen

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

Nutzungshinweise

  • Das Schlüsselwort DISTINCT kann bei dieser Funktion angegeben werden, hat jedoch keine Auswirkungen.

  • Bei Verwendung als Fensterfunktion:

    • Diese Funktion unterstützt nicht:

      • ORDER BY-Unterklausel in der OVER()-Klausel

      • Fensterrahmen

Verwenden von ANY_VALUE mit GROUP BY-Anweisungen

Mit ANY_VALUE kann die Leistung von GROUP BY-Anweisungen vereinfacht und optimiert werden. Ein häufiges Problem bei vielen Abfragen ist, dass das Ergebnis einer Abfrage mit einer GROUP BY-Klausel nur Ausdrücke enthalten kann, die in der GROUP BY-Klausel selbst verwendet werden, oder Ergebnisse von Aggregatfunktionen. Beispiel:

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

In dieser Abfrage muss das Attribut customer.name in GROUP BY enthalten sein, um in das Ergebnis aufgenommen zu werden. Dies ist eigentlich nicht erforderlich (z. B. wenn bekannt ist, dass customer.id eindeutig ist) und macht die Berechnung möglicherweise komplexer und langsamer. Eine weitere Option ist die Verwendung einer Aggregatfunktion. Beispiel:

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

Dies vereinfacht die GROUP BY-Klausel, erfordert jedoch weiterhin das Berechnen der MIN-Funktion, was zusätzliche Kosten verursacht.

Mit ANY_VALUE können Sie die folgende Abfrage ausführen:

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