Mathematische Funktionen in Standard-SQL

Alle mathematischen Funktionen verhalten sich in folgender Weise:

  • Sie geben NULL zurück, wenn einer der Eingabeparameter NULL ist.
  • Sie geben NaN zurück, wenn eines der Argumente NaN ist.

ABS

ABS(X)

Beschreibung

Berechnet den absoluten Wert. Gibt einen Fehler zurück, wenn das Argument eine Ganzzahl ist und der Ausgabewert nicht als der gleiche Typ dargestellt werden kann. Dies geschieht nur für den größten negativen Eingabewert, der nicht positiv dargestellt wird.

X ABS(X)
25 25
-25 25
+inf +inf
-inf +inf

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTINT64NUMERICBIGNUMERICFLOAT64

SIGN

SIGN(X)

Beschreibung

Gibt -1, 0 oder +1 für negative, Null- bzw. positive Argumente zurück. Bei Gleitkommaargumenten unterscheidet diese Funktion nicht zwischen positiv und negativ null.

X SIGN(X)
25 +1
0 0
-25 -1
NaN NaN

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTINT64NUMERICBIGNUMERICFLOAT64

IS_INF

IS_INF(X)

Beschreibung

Gibt TRUE zurück, wenn der Wert positiv oder negativ unendlich ist.

X IS_INF(X)
+inf TRUE
-inf TRUE
25 FALSE

IS_NAN

IS_NAN(X)

Beschreibung

Gibt TRUE zurück, wenn der Wert ein NaN-Wert ist.

X IS_NAN(X)
NaN TRUE
25 FALSE

IEEE_DIVIDE

IEEE_DIVIDE(X, Y)

Beschreibung

Dividiert X durch Y. Diese Funktion schlägt nie fehl. Gibt FLOAT64 zurück. Erzeugt im Gegensatz zum Divisionsoperator (/) keinen Fehler für die Division durch null oder Überlauf.

X J IEEE_DIVIDE(X, Y)
20.0 4.0 5,0
0,0 25.0 0,0
25.0 0,0 +inf
-25.0 0,0 -inf
0,0 0,0 NaN
0,0 NaN NaN
NaN 0,0 NaN
+inf +inf NaN
-inf -inf NaN

RAND

RAND()

Beschreibung

Erzeugt einen Pseudozufallswert vom Typ FLOAT64 im Bereich [0, 1), einschließlich 0 und exklusive 1.

SQRT

SQRT(X)

Beschreibung

Berechnet die Quadratwurzel aus X. Generiert einen Fehler, wenn X kleiner als 0 ist.

X SQRT(X)
25.0 5.0
+inf +inf
X < 0 Fehler

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

POW

POW(X, Y)

Beschreibung

Gibt den Wert X zurück, der mit Y potenziert wird. Wenn das Ergebnis unterläuft und nicht darstellbar ist, gibt die Funktion den Wert null zurück.

X J POW(X, Y)
2.0 3,0 8.0
1,0 Beliebiger Wert, einschließlich NaN 1,0
Beliebiger Wert, einschließlich NaN 0 1,0
-1,0 +inf 1,0
-1,0 -inf 1,0
ABS (X) < 1 -inf +inf
ABS (X) > 1 -inf 0,0
ABS (X) < 1 +inf 0,0
ABS (X) > 1 +inf +inf
-inf Y < 0 0,0
-inf Y > 0 -inf, wenn Y eine ungerade Ganzzahl ist, sonst +inf
+inf Y < 0 0
+inf Y > 0 +inf
Endlicher Wert < 0 Keine Ganzzahl Fehler
0 Endlicher Wert < 0 Fehler

Rückgabedatentyp

Der Rückgabedatentyp wird durch die Argumenttypen mit der folgenden Tabelle bestimmt.

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64FLOAT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

POWER

POWER(X, Y)

Beschreibung

Synonym für POW(X, Y).

EXP

EXP(X)

Beschreibung

Potenziert e mit X, was auch als natürliche Exponentialfunktion bezeichnet wird. Bei einem Unterlauf des Ergebnisses gibt diese Funktion eine Null zurück. Erzeugt einen Fehler, wenn ein Überlauf des Ergebnisses auftritt.

X EXP(X)
0,0 1,0
+inf +inf
-inf 0,0

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

LN

LN(X)

Beschreibung

Berechnet den natürlichen Logarithmus von X. Generiert einen Fehler, wenn X kleiner als oder gleich null ist.

X LN(X)
1,0 0,0
+inf +inf
X < 0 Fehler

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

LOG

LOG(X [, Y])

Beschreibung

Wenn nur X vorhanden ist, dann ist LOG ein Synonym für LN. Ist Y ebenfalls vorhanden, berechnet LOG den Logarithmus von X zur Basis Y.

X Y LOG(X, Y)
100,0 10,0 2.0
-inf Beliebiger Wert NaN
Beliebiger Wert +inf NaN
+inf 0.0 < Y < 1.0 -inf
+inf Y > 1,0 +inf
X <= 0 Beliebiger Wert Fehler
Beliebiger Wert Y <= 0 Fehler
Beliebiger Wert 1,0 Fehler

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64FLOAT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

LOG10

LOG10(X)

Beschreibung

Ähnlich wie bei LOG, berechnet den Logarithmus aber auf Basis 10.

X LOG10(X)
100,0 2.0
-inf NaN
+inf NaN
X <= 0 Fehler

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

GREATEST

GREATEST(X1,...,XN)

Beschreibung

Der größte Wert wird unter X1,…,XN gemäß Kleiner-als-Vergleich (<) zurückgegeben. Wenn Teile von X1,...,XN NULL sind, ist der Rückgabewert NULL.

X1,...,XN GREATEST(X1,...,XN)
3,5,1 5

Rückgabedatentypen

Der Datentyp der Eingabewerte.

LEAST

LEAST(X1,...,XN)

Beschreibung

Der kleinste Wert wird unter X1,…,XN gemäß Größer-als-Vergleich (>) zurückgegeben. Wenn Teile von X1,...,XN NULL sind, ist der Rückgabewert NULL.

X1,...,XN LEAST(X1,...,XN)
3,5,1 1

Rückgabedatentypen

Der Datentyp der Eingabewerte.

DIV

DIV(X, Y)

Beschreibung

Gibt das Ergebnis der Ganzzahldivision von X durch Y zurück. Die Division durch null gibt einen Fehler zurück. Division durch -1 kann überlaufen.

X J DIV(X, Y)
20 4 5
0 20 0
20 0 Fehler

Rückgabedatentyp

Der Rückgabedatentyp wird durch die Argumenttypen mit der folgenden Tabelle bestimmt.

INPUTINT64NUMERICBIGNUMERIC
INT64INT64NUMERICBIGNUMERIC
NUMERICNUMERICNUMERICBIGNUMERIC
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERIC

SAFE_DIVIDE

SAFE_DIVIDE(X, Y)

Beschreibung

Entspricht dem Divisionsoperator (X / Y), gibt jedoch NULL zurück, wenn ein Fehler auftritt, beispielsweise bei einer Division durch null.

XJSAFE_DIVIDE(X, Y)
2045
0200
200NULL

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64FLOAT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_MULTIPLY

SAFE_MULTIPLY(X, Y)

Beschreibung

Entspricht dem Multiplikationsoperator (*), gibt jedoch NULL zurück, wenn ein Überlauf auftritt.

XJSAFE_MULTIPLY(X, Y)
20480

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64INT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_NEGATE

SAFE_NEGATE(X)

Beschreibung

Entspricht dem Unäres-Minus-Operator (-), gibt jedoch NULL zurück, wenn ein Überlauf auftritt.

XSAFE_NEGATE(X)
+1-1
-1+1
00

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTINT64NUMERICBIGNUMERICFLOAT64

SAFE_ADD

SAFE_ADD(X, Y)

Beschreibung

Entspricht dem Additionsoperator (+), gibt jedoch NULL zurück, wenn ein Überlauf auftritt.

XJSAFE_ADD(X, Y)
549

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64INT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

SAFE_SUBTRACT

SAFE_SUBTRACT(X, Y)

Beschreibung

Gibt das Ergebnis von X minus Y zurück. Entspricht dem Subtraktionsoperator (-), gibt jedoch NULL zurück, wenn ein Überlauf auftritt.

XJSAFE_SUBTRACT(X, Y)
541

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
INT64INT64NUMERICBIGNUMERICFLOAT64
NUMERICNUMERICNUMERICBIGNUMERICFLOAT64
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERICFLOAT64
FLOAT64FLOAT64FLOAT64FLOAT64FLOAT64

MOD

MOD(X, Y)

Beschreibung

Modulo-Funktion: gibt den Rest der Division von X durch Y zurück. Der zurückgegebene Wert hat dasselbe Vorzeichen wie X. Wenn Y gleich 0 ist, wird ein Fehler ausgegeben.

X J MOD(X, Y)
25 12 1
25 0 Fehler

Rückgabedatentyp

Der Rückgabedatentyp wird durch die Argumenttypen mit der folgenden Tabelle bestimmt.

INPUTINT64NUMERICBIGNUMERIC
INT64INT64NUMERICBIGNUMERIC
NUMERICNUMERICNUMERICBIGNUMERIC
BIGNUMERICBIGNUMERICBIGNUMERICBIGNUMERIC

ROUND

ROUND(X [, N])

Beschreibung

Wenn nur X vorhanden ist, rundet ROUND X auf die nächste Ganzzahl. Wenn N vorhanden ist, rundet ROUND X auf N-Dezimalstellen nach dem Dezimalzeichen. Wenn N negativ ist, rundet ROUND die Ziffern links vom Dezimalzeichen ab. Rundet halbe Zahlen von null weg. Erzeugt einen Fehler, wenn ein Überlauf auftritt.

X ROUND(X)
2.0 2,0
2,3 2.0
2,8 3,0
2,5 3,0
-2,3 -2,0
-2,8 -3,0
-2,5 -3,0
0 0
+inf +inf
-inf -inf
NaN NaN

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

TRUNC

TRUNC(X [, N])

Beschreibung

Wenn nur X vorhanden ist, rundet TRUNC X auf die nächste Ganzzahl, deren absoluter Wert nicht größer als der absolute Wert von X ist. Wenn N ebenfalls vorhanden ist, verhält sich TRUNC wie ROUND(X, N), rundet aber immer gegen null und läuft nie über.

X TRUNC(X)
2.0 2,0
2,3 2.0
2,8 2.0
2,5 2.0
-2,3 -2,0
-2,8 -2,0
-2,5 -2,0
0 0
+inf +inf
-inf -inf
NaN NaN

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

CEIL

CEIL(X)

Beschreibung

Gibt den kleinsten Integralwert zurück, der nicht kleiner als X ist.

X CEIL(X)
2.0 2,0
2,3 3,0
2,8 3,0
2,5 3,0
-2,3 -2,0
-2,8 -2,0
-2,5 -2,0
0 0
+inf +inf
-inf -inf
NaN NaN

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

CEILING

CEILING(X)

Beschreibung

Synonym von CEIL(X)

FLOOR

FLOOR(X)

Beschreibung

Gibt den größten Integralwert zurück, der nicht größer als X ist.

X FLOOR(X)
2,0 2,0
2,3 2.0
2,8 2.0
2,5 2.0
-2,3 -3,0
-2,8 -3,0
-2,5 -3,0
0 0
+inf +inf
-inf -inf
NaN NaN

Rückgabedatentyp

INPUTINT64NUMERICBIGNUMERICFLOAT64
OUTPUTFLOAT64NUMERICBIGNUMERICFLOAT64

COS

COS(X)

Beschreibung

Berechnet den Kosinus von X, wobei X als Radiant angegeben wird. Schlägt niemals fehl.

X COS(X)
+inf NaN
-inf NaN
NaN NaN

COSH

COSH(X)

Beschreibung

Berechnet den hyperbolischen Kosinus von X, wobei X als Radiant angegeben wird. Erzeugt einen Fehler, wenn ein Überlauf auftritt.

X COSH(X)
+inf +inf
-inf +inf
NaN NaN

ACOS

ACOS(X)

Beschreibung

Berechnet den Hauptwert des inversen Kosinus von X. Der zurückgegebene Wert liegt im Bereich [0,π]. Erzeugt einen Fehler, wenn X ein Wert außerhalb des Bereichs [-1, 1] ist.

X ACOS(X)
+inf NaN
-inf NaN
NaN NaN
X < -1 Fehler
X > 1 Fehler

ACOSH

ACOSH(X)

Beschreibung

Berechnet den inversen hyperbolischen Kosinus von X. Erzeugt einen Fehler, wenn X ein Wert kleiner als 1 ist.

X ACOSH(X)
+inf +inf
-inf NaN
NaN NaN
X < 1 Fehler

SIN

SIN(X)

Beschreibung

Berechnet den Sinus von X, wobei X als Radiant angegeben wird. Schlägt niemals fehl.

X SIN(X)
+inf NaN
-inf NaN
NaN NaN

SINH

SINH(X)

Beschreibung

Berechnet den hyperbolischen Sinus von X, wobei X als Radiant angegeben wird. Erzeugt einen Fehler, wenn ein Überlauf auftritt.

X SINH(X)
+inf +inf
-inf -inf
NaN NaN

ASIN

ASIN(X)

Beschreibung

Berechnet den Hauptwert des inversen Sinus von X. Der zurückgegebene Wert liegt im Bereich [-π/2,π/2]. Erzeugt einen Fehler, wenn X außerhalb des Bereichs [-1, 1] liegt.

X ASIN(X)
+inf NaN
-inf NaN
NaN NaN
X < -1 Fehler
X > 1 Fehler

ASINH

ASINH(X)

Beschreibung

Berechnet den inversen hyperbolischen Sinus von X. Scheitert nie.

X ASINH(X)
+inf +inf
-inf -inf
NaN NaN

TAN

TAN(X)

Beschreibung

Berechnet den Tangens von X, wobei X als Radiant angegeben wird. Erzeugt einen Fehler, wenn das Ergebnis überläuft.

X TAN(X)
+inf NaN
-inf NaN
NaN NaN

TANH

TANH(X)

Beschreibung

Berechnet den hyperbolischen Tangens von X, wobei X als Radiant angegeben wird. Schlägt nie fehl.

X TANH(X)
+inf 1,0
-inf -1,0
NaN NaN

ATAN

ATAN(X)

Beschreibung

Berechnet den Hauptwert des inversen Tangens von X. Der zurückgegebene Wert liegt im Bereich [-π/2,π/2]. Scheitert nie.

X ATAN(X)
+inf π/2
-inf -π/2
NaN NaN

ATANH

ATANH(X)

Beschreibung

Berechnet den inversen hyperbolischen Tangens von X. Erzeugt einen Fehler, wenn X außerhalb des Bereichs [-1, 1] liegt.

X ATANH(X)
+inf NaN
-inf NaN
NaN NaN
X < -1 Fehler
X > 1 Fehler

ATAN2

ATAN2(X, Y)

Beschreibung

Berechnet den Hauptwert des inversen Tangens von X/Y unter Verwendung der Vorzeichen der beiden Argumente, um den Quadranten zu bestimmen. Der zurückgegebene Wert liegt im Bereich [-π, π].

X J ATAN2(X, Y)
NaN Beliebiger Wert NaN
Beliebiger Wert NaN NaN
0,0 0,0 0,0
Positiver endlicher Wert -inf π
Negativer endlicher Wert -inf
Endlicher Wert +inf 0,0
+inf Endlicher Wert π/2
-inf Endlicher Wert -π/2
+inf -inf ¾π
-inf -inf -¾π
+inf +inf π/4
-inf +inf -π/4

RANGE_BUCKET

RANGE_BUCKET(point, boundaries_array)

Beschreibung

RANGE_BUCKET scannt ein sortiertes Array und gibt die 0-basierte Position der oberen Grenze des Punkts zurück. Dies kann nützlich sein, wenn Sie Ihre Daten gruppieren müssen, um Partitionen, Histogramme, unternehmensspezifische Regeln usw. zu erstellen.

RANGE_BUCKET folgt diesen Regeln:

  • Wenn der Punkt im Array vorhanden ist, wird der Index des nächstgrößeren Werts zurückgegeben.

    RANGE_BUCKET(20, [0, 10, 20, 30, 40]) -- 3 is return value
    RANGE_BUCKET(20, [0, 10, 20, 20, 40, 40]) -- 4 is return value
    
  • Wenn der Punkt nicht im Array vorhanden ist, aber zwischen zwei Werten liegt, wird der Index des größeren Werts zurückgegeben.

    RANGE_BUCKET(25, [0, 10, 20, 30, 40]) -- 3 is return value
    
  • Wenn der Punkt kleiner als der erste Wert im Array ist, wird 0 zurückgegeben.

    RANGE_BUCKET(-10, [5, 10, 20, 30, 40]) -- 0 is return value
    
  • Wenn der Punkt größer oder gleich dem letzten Wert im Array ist, wird die Länge des Arrays zurückgegeben.

    RANGE_BUCKET(80, [0, 10, 20, 30, 40]) -- 5 is return value
    
  • Wenn das Array leer ist, wird 0 zurückgegeben.

    RANGE_BUCKET(80, []) -- 0 is return value
    
  • Wenn der Punkt NULL oder NaN ist, wird NULL zurückgegeben.

    RANGE_BUCKET(NULL, [0, 10, 20, 30, 40]) -- NULL is return value
    
  • Der Datentyp für den Punkt und das Array muss kompatibel sein.

    RANGE_BUCKET('a', ['a', 'b', 'c', 'd']) -- 1 is return value
    RANGE_BUCKET(1.2, [1, 1.2, 1.4, 1.6]) -- 2 is return value
    RANGE_BUCKET(1.2, [1, 2, 4, 6]) -- execution failure
    

Ein Ausführungsfehler tritt in folgenden Fällen auf:

  • Das Array enthält einen NaN- oder NULL-Wert.

    RANGE_BUCKET(80, [NULL, 10, 20, 30, 40]) -- execution failure
    
  • Das Array ist nicht in aufsteigender Reihenfolge sortiert.

    RANGE_BUCKET(30, [10, 30, 20, 40, 50]) -- execution failure
    

Parameter

  • point: Ein generischer Wert.
  • boundaries_array: Ein generisches Array von Werten.

Rückgabewert

INT64

Beispiele

Prüfen Sie in einer Tabelle mit dem Namen students, wie viele Datensätze in jedem age_group-Bucket auf Basis des Alters eines Schülers/Studenten vorhanden wären:

  • age_group 0 (Alter < 10)
  • age_group 1 (Alter >= 10, Alter < 20)
  • age_group 2 (Alter >= 20, Alter < 30)
  • age_group 3 (Alter >= 30)
WITH students AS
(
  SELECT 9 AS age UNION ALL
  SELECT 20 AS age UNION ALL
  SELECT 25 AS age UNION ALL
  SELECT 31 AS age UNION ALL
  SELECT 32 AS age UNION ALL
  SELECT 33 AS age
)
SELECT RANGE_BUCKET(age, [10, 20, 30]) AS age_group, COUNT(*) AS count
FROM students
GROUP BY 1

+--------------+-------+
| age_group    | count |
+--------------+-------+
| 0            | 1     |
| 2            | 2     |
| 3            | 3     |
+--------------+-------+