Funciones matemáticas en SQL estándar

Todas las funciones matemáticas tienen los comportamientos siguientes:

  • Muestran NULL si alguno de los parámetros de entrada es .
  • Muestran NaN si alguno de los argumentos es .

ABS

ABS(X)

Descripción

Calcula el valor absoluto. Muestra un error si el argumento es un número entero y el valor de resultado no se puede representar como el mismo tipo; esto sucede solo para el valor de entrada negativo más grande, que no tiene una representación positiva. Muestra +inf para un argumento +/-inf.

SIGN

SIGN(X)

Descripción

Muestra -1, 0 o +1 para los argumentos negativos, de cero y positivos, respectivamente. Para argumentos de punto flotante, esta función no distingue entre cero positivo y negativo. Muestra NaN para un argumento NaN.

IS_INF

IS_INF(X)

Descripción

Muestra TRUE si el valor es infinito positivo o negativo. Muestra NULL para las entradas NULL.

IS_NAN

IS_NAN(X)

Descripción

Muestra TRUE si el valor es NaN. Muestra NULL para las entradas NULL.

IEEE_DIVIDE

IEEE_DIVIDE(X, Y)

Descripción

Divide X por Y; esta función nunca presenta errores. Muestra FLOAT64. A diferencia del operador de división (/), esta función no genera errores de divisiones por cero o se desborda.

Casos especiales:

  • Si el resultado se desborda, muestra +/-inf.
  • Si Y=0 y X=0, muestra NaN.
  • Si Y=0 y X!=0, muestra +/-inf.
  • Si X = +/-inf e Y = , muestra NaN.

El comportamiento de IEEE_DIVIDE se ilustra con más detalle en la tabla a continuación.

Casos especiales de IEEE_DIVIDE

La tabla siguiente enumera los casos especiales de IEEE_DIVIDE.

Tipo de datos del numerador (X) Tipo de datos del denominador (Y) Valor del resultado
Todo excepto 0 0 +/-inf
0 0 NaN
0 NaN NaN
NaN 0 NaN
+/-inf +/-inf NaN

RAND

RAND()

Descripción

Genera un valor seudoaleatorio de tipo FLOAT64 en el rango de [0, 1), inclusive de 0 y exclusivo de 1.

SQRT

SQRT(X)

Descripción

Calcula la raíz cuadrada de X. Genera un error si X es menor que 0. Muestra +inf si X es +inf.

POW

POW(X, Y)

Descripción

Muestra el valor de X elevado a la potencia de Y. Si el resultado se subdesborda y no es representable, entonces la función muestra un valor de cero. Muestra un error si uno de los siguientes es verdadero:

  • X es un valor finito menor que 0 y, además, Y es un número no entero
  • X es 0 y, también, Y es un valor finito menor que 0

El comportamiento de POW() se ilustra con más detalle en la tabla a continuación.

POWER

POWER(X, Y)

Descripción

Sinónimo de POW().

Casos especiales de POW(X, Y) y POWER(X, Y)

Los siguientes son casos especiales de POW(X, Y) y POWER(X, Y).

X Y POW(X, Y) o POWER(X, Y)
1.0 Cualquier valor, incluido NaN 1.0
Cualquiera, incluido NaN 0 1.0
-1.0 +/-inf 1.0
ABS(X) < 1 -inf +inf
ABS(X) > 1 -inf 0
ABS(X) < 1 +inf 0
ABS(X) > 1 +inf +inf
-inf Y < 0 0
-inf Y > 0 -inf si Y es un número entero impar, +inf si es lo contrario
+inf Y < 0 0
+inf Y > 0 +inf

EXP

EXP(X)

Descripción

Calcula e elevado a X, también llamada función exponencial natural. Si el resultado se subdesborda, esta función muestra un cero. Genera un error si el resultado se subdesborda. Si X es +/-inf, entonces esta función muestra +inf o 0.

LN

LN(X)

Descripción

Calcula el logaritmo natural de X. Genera un error si X es menor o igual que cero. Si X es +inf, entonces esta función muestra +inf.

LOG

LOG(X [, Y])

Descripción

Si solo X está presente, LOG es un sinónimo de LN. Si Y también está presente, LOG calcula el logaritmo de X a la base Y. Genera un error en los casos siguientes:

  • X es menor o igual que cero.
  • Y es 1.0.
  • Y es menor o igual que cero.

El comportamiento de LOG(X, Y) se ilustra con más detalle en la tabla a continuación.

Casos especiales de LOG(X, Y)

X Y LOG(X, Y)
-inf Cualquier valor NaN
Cualquier valor +inf NaN
+inf 0.0 Y < 1.0 -inf
+inf Y > 1.0 +inf

LOG10

LOG10(X)

Descripción

Similar a LOG, pero calcula el logaritmo a base 10.

GREATEST

GREATEST(X1,...,XN)

Descripción

Muestra NULL si alguna de las entradas es . De lo contrario, muestra NaN si alguna de las entradas es NaN. Si no, muestra el valor más grande entre X1,…,XN según la comparación <.

LEAST

LEAST(X1,...,XN)

Descripción

Muestra NULL si alguna de las entradas es . Muestra NaN si alguna de las entradas es NaN. Si no, muestra el valor más pequeño entre X1,…,XN según la > comparación.

DIV

DIV(X, Y)

Descripción

Muestra el resultado de la división del número entero de X por Y. La división por cero muestra un error. La división por -1 se puede desbordar. Consulta la tabla a continuación para obtener tipos de resultados posibles.

SAFE_DIVIDE

SAFE_DIVIDE(X, Y)

Descripción

Equivale al operador de división (/), pero muestra NULL si se produce un error, como un error de división por cero.

SAFE_MULTIPLY

SAFE_MULTIPLY(X, Y)

Descripción

Equivalente al operador de multiplicación (*), pero muestra NULL si se produce un desbordamiento.

SAFE_NEGATE

SAFE_NEGATE(X)

Descripción

Equivalente al operador menos unario (-), pero muestra NULL si se produce un desbordamiento.

SAFE_ADD

SAFE_ADD(X, Y)

Descripción

Equivale al operador de suma (+), pero muestra NULL si se produce un desbordamiento.

SAFE_SUBTRACT

SAFE_SUBTRACT(X, Y)

Descripción

Equivalente al operador de resta (-), pero muestra NULL si se produce un desbordamiento.

MOD

MOD(X, Y)

Descripción

Función de módulo: muestra el resto de la división de X por Y. El valor que se muestra tiene el mismo signo que X. Se generará un error si Y es 0. Consulta la tabla a continuación para obtener tipos de resultados posibles.

ROUND

ROUND(X [, N])

Descripción

Si solo está presente X, ROUND redondea X al número entero más cercano. Si N está presente, ROUND redondea X a N decimales después del punto decimal. Si N es negativo, ROUND redondeará los dígitos a la izquierda del punto decimal. Se redondean casos de punto medio en dirección opuesta al cero. Genera un error si se produce un desbordamiento.

TRUNC

TRUNC(X [, N])

Descripción

Si solo está presente X, TRUNC redondea X al número entero más cercano cuyo valor absoluto no es mayor que el valor absoluto de X. Si N también está presente, TRUNC se comporta como ROUND(X, N), pero siempre se redondea hacia cero y nunca se desborda.

CEIL

CEIL(X)

Descripción

Muestra el valor integral más pequeño (con el tipo FLOAT64) que no es menor que X.

CEILING

CEILING(X)

Descripción

Sinónimo de CEIL(X)

FLOOR

FLOOR(X)

Descripción

Muestra el valor integral más grande (con el tipo FLOAT64) que no es mayor que X.

Ejemplo del comportamiento de la función de redondeo

Ejemplo del comportamiento de las funciones de redondeo de BigQuery:

Entrada “X” ROUND(X) TRUNC(X) CEIL(X) FLOOR(X)
2.0 2.0 2.0 2.0 2.0
2.3 2.0 2.0 3.0 2.0
2.8 3.0 2.0 3.0 2.0
2.5 3.0 2.0 3.0 2.0
-2.3 -2.0 -2.0 -2.0 -3.0
-2.8 -3.0 -2.0 -2.0 -3.0
-2.5 -3.0 -2.0 -2.0 -3.0
0 0 0 0 0
+/-inf +/-inf +/-inf +/-inf +/-inf
NaN NaN NaN NaN NaN

COS

COS(X)

Descripción

Calcula el coseno de X, en el que X se especifica en radianes. Nunca falla.

COSH

COSH(X)

Descripción

Calcula el coseno hiperbólico de X, en el que X se especifica en radianes. Genera un error si se produce un desbordamiento.

ACOS

ACOS(X)

Descripción

Calcula el valor principal del coseno inverso de X. El valor de muestra está en el rango [0,π]. Genera un error si X es un valor fuera del rango [-1, 1].

ACOSH

ACOSH(X)

Descripción

Calcula el coseno hiperbólico inverso de X. Genera un error si X es un valor inferior a 1.

SIN

SIN(X)

Descripción

Calcula el seno de X, en el que X se especifica en radianes. Nunca falla.

SINH

SINH(X)

Descripción

Calcula el seno hiperbólico de X, en el que X se especifica en radianes. Genera un error si se produce un desbordamiento.

ASIN

ASIN(X)

Descripción

Calcula el valor principal del seno inverso de X. El valor de muestra está en el rango [-π/2,π/2]. Genera un error si X está fuera del rango [-1, 1].

ASINH

ASINH(X)

Descripción

Calcula el seno hiperbólico inverso de X. No falla.

TAN

TAN(X)

Descripción

Calcula la tangente de X, en el que X se especifica en radianes. Genera un error si se produce un desbordamiento.

TANH

TANH(X)

Descripción

Calcula la tangente hiperbólica de X, en el que X se especifica en radianes. No falla.

ATAN

ATAN(X)

Descripción

Calcula el valor principal de la tangente inversa de X. El valor de muestra está en el rango [-π/2,π/2]. No falla.

ATANH

ATANH(X)

Descripción

Calcula la tangente hiperbólica inversa de X. Genera un error si X está fuera del rango [-1, 1].

ATAN2

ATAN2(Y, X)

Descripción

Calcula el valor principal de la tangente inversa de Y/X con los signos de los dos argumentos para determinar el cuadrante. El valor de muestra está en el rango [-π,π]. El comportamiento de esta función se ilustra con más detalle en la tabla siguiente.

Casos especiales de ATAN2()

Y X ATAN2(Y, X)
NaN Cualquier valor NaN
Cualquier valor NaN NaN
0 0 0, π o -π según el signo de X y de Y
Valor finito -inf π o -π según el signo de Y
Valor finito +inf 0
+/-inf Valor finito π/2 o π/2 según el signo de Y
+/-inf -inf ¾π o -¾π según el signo de Y
+/-inf +inf π/4 o -π/4 según el signo de Y

Casos especiales de funciones de redondeo hiperbólicas y trigonométricas

X COS(X) COSH(X) ACOS(X) ACOSH(X) SIN(X) SINH(X) ASIN(X) ASINH(X) TAN(X) TANH(X) ATAN(X) ATANH(X)
+/-inf NaN =+inf NaN =+inf NaN =+inf NaN =+inf NaN =+1.0 π/2 NaN
-inf NaN =+inf NaN NaN NaN -inf NaN -inf NaN -1.0 -π/2 NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

RANGE_BUCKET

RANGE_BUCKET(point, boundaries_array)

Descripción

RANGE_BUCKET examina un arreglo ordenado y muestra la posición basada en 0 del límite superior del punto. Esto puede ser útil si necesitas agrupar tus datos para compilar particiones, histogramas, reglas definidas por el negocio y mucho más.

RANGE_BUCKET sigue estas reglas:

  • Si el punto existe en el arreglo, muestra el índice del siguiente valor más grande.

    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
    
  • Si el punto no existe en el arreglo, pero oscila entre dos valores, muestra el índice del valor más grande.

    RANGE_BUCKET(25, [0, 10, 20, 30, 40]) -- 3 is return value
    
  • Si el punto es más pequeño que el primer valor del arreglo, muestra 0.

    RANGE_BUCKET(-10, [5, 10, 20, 30, 40]) -- 0 is return value
    
  • Si el punto es mayor o igual que el último valor del arreglo, muestra la longitud de este.

    RANGE_BUCKET(80, [0, 10, 20, 30, 40]) -- 5 is return value
    
  • Si el arreglo está vacío, muestra 0.

    RANGE_BUCKET(80, []) -- 0 is return value
    
  • Si el punto es NULL o NaN, muestra .

    RANGE_BUCKET(NULL, [0, 10, 20, 30, 40]) -- NULL is return value
    
  • El tipo de datos del punto y el arreglo debe ser compatible.

    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
    

La falla de ejecución se produce en los siguientes casos:

  • El arreglo tiene un valor NaN o NULL.

    RANGE_BUCKET(80, [NULL, 10, 20, 30, 40]) -- execution failure
    
  • El arreglo no se ordenó de forma ascendente.

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

Parámetros

  • point: un valor genérico.
  • boundaries_array: un arreglo genérico de valores.

Valor que se muestra

INT64

Ejemplos

En una tabla denominada students, verifica cuántos registros existirían en cada depósito de age_group, según la edad del alumno:

  • age_group 0 (age < 10)
  • age_group 1 (age >= 10, age < 20)
  • age_group 2 (age >= 20, age < 30)
  • age_group 3 (age >= 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     |
+--------------+-------+
¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Si necesitas ayuda, visita nuestra página de asistencia.