Uso de Operaciones Matemáticas en Consultas

Obtenga información sobre las funciones matemáticas soportadas en Oracle NoSQL Database Cloud Service.

Las funciones matemáticas se utilizan para realizar cálculos matemáticos en los argumentos de entrada. Aquí, los argumentos proporcionados son expresiones que se resuelven en números.

Puede llamar a las funciones matemáticas desde las cláusulas SELECT/WHERE y también desde otras sentencias Oracle NoSQL en las que se permiten llamadas de función en la sintaxis. Por ejemplo, puede proporcionar funciones matemáticas como argumentos para Usar funciones agregadas.

Las siguientes funciones están soportadas en Oracle NoSQL Database Cloud Service:

Tabla 1 - Funciones matemáticas

Función Descripción
abs(n) Devuelve el valor absoluto de n.
acos(n) Devuelve el arcocoseno de n expresado en radianes.
asin(n) Devuelve el arcoseno de n expresado en radianes.
atan(n) Devuelve el arcotangente de n expresado en radianes.
atan2(n1,n2) Devuelve el arco tangente de los argumentos n1 y n2 expresados en radianes.
techo(n) Devuelve el entero más pequeño que es mayor o igual que n.
cos(n) Devuelve el coseno de un ángulo n especificado en radianes.
cuna(n) Devuelve el valor cotangente de un ángulo n especificado en radianes.
grados (n) Convierte n de radianes a grados.
(e) Devuelve el valor del número de Euler e.
exp(n) Devuelve el valor exponencial de la expresión n.
piso(n) Devuelve el mayor número entero menor o igual que n.
ln(n) Devuelve el valor logarítmico natural (base e) de n.
log(n,b) Devuelve el valor b de base logarítmica de n.
log10(n) Devuelve el valor 10 de la base logarítmica de n.
pi() Devuelve el valor de pi.
potencia(n2,n1) Devuelve el valor de n2 elevado a la energía n1.
radianes(n) Convierte n de grados a radianes.
rand() Devuelve un número pseudoaleatorio entre cero y uno.
ronda(n [,d]) Redondea n a d posiciones a la derecha de la coma decimal.
signo(n) Devuelve el signo de n.
sin(n) Devuelve el seno de un ángulo n especificado en radianes.
raíz(n) Devuelve la raíz cuadrada de n.
tan(n) Devuelve la tangente de un ángulo n especificado en radianes.
trunc(n [,d]) Devuelve el valor de n truncado a d decimales.

Nota:

Para seguir los ejemplos de las secciones, puede crear las tablas y cargar los datos como se describe en la sección Ejemplos adicionales.

función abs

La función abs devuelve el valor absoluto de la expresión de entrada.

Ejemplo 1 - función abs

SELECT abs(n) FROM Userstocks
Valor de n Salida
10 10
-10 10
1,67 1,67
-1,67 1,67

función del coseno del arco

La función acos es una función trigonométrica inversa. La función acos devuelve el coseno del arco (inverso del coseno) de la expresión de entrada.

Ejemplo 1: función de coseno de arco

SELECT acos(n) FROM Archery
Valor de n Salida
1 0
0 1,571
sqrt(3)/2 0,524
0,5 1,047
-1 3,142

función seno arco

La función asin es una función trigonométrica inversa. La función asin devuelve el seno de arco (inverso del seno) de la expresión de entrada.

Ejemplo 1: función sinusoidal de arco

SELECT asin(n) FROM Archery
Valor de n Salida
1 1,571
sqrt(3)/2 1,047
0,5 0,524
-1 -1,571

función de bronceado arco

La función atan es una función trigonométrica inversa. La función atan devuelve el arco tangente (inverso de tangente) de la expresión de entrada.

Ejemplo 1 - función de bronceado de arco

SELECT atan(n) FROM Archery
Valor de n Salida
1 0,785
Sqrt(3) 1,047

función tan2 de arco

La función atan2 es una función trigonométrica inversa. La función atan2 es una función tangente de arco de dos argumentos (inverso de bronceado), que devuelve la tangente de arco de una coordenada o punto en un espacio bidimensional (n1, n2) calculado como atan(n2/n1).

Ejemplo 1 - función tan2 de arco

SELECT atan2(n1,n2) FROM Archery
Valor de n1 Valor de n2 Salida
1 1 0,785
1 Sqrt(3) 1,047
2 0 1,571

función de techo

La función ceil devuelve el entero más pequeño que es mayor o igual que la expresión especificada.

Ejemplo 1: función de techo

SELECT ceil(n) FROM Userstocks
Valor de n Salida
1,34 2
-1,34 -1
pi() 4

función costera

La función cos es una función trigonométrica. La función cos devuelve el coseno de un ángulo especificado en radianes.

Ejemplo 1: función coseno

SELECT cos(n) FROM Archery
Valor de n Salida
0 1
radianes(90) 6.123233995736766E-17
pi() -1

función cotangente

La función cot es una función trigonométrica. La función cot devuelve la cotangente de un ángulo especificado en radianes.

Ejemplo 1 - función cotangent

SELECT cot(n) FROM Archery
Valor de n Salida
0 Infinito
radianes(90) 6.123233995736766E-17
pi()/4 1

función de grados

La función degrees convierte la expresión especificada de radianes a grados.

Ejemplo 1: función de grados

SELECT degrees(n) FROM Archery
Valor de n Salida
pi()/2 90
0 0

Función Euler

La función e devuelve el valor del número de Euler e, es decir, 2.718281828459045.

Ejemplo 1 - Función Euler

SELECT e() AS EULER FROM Archery

Salida:

+-----------+-------------------+
| EULER     | 2.718281828459045 |
+-----------+-------------------+

función exp

La función exp devuelve el valor exponencial de la expresión especificada, es decir, e elevado a la potencia de la expresión especificada. Aquí, e es la base del logaritmo natural y tiene el valor 2.718281828459045.

Ejemplo 1 - función exp

SELECT exp(n) FROM PHtable
Valor de n Salida
0 1
2 7,389
-2 0,135

función de piso

La función floor devuelve el entero más grande que es menor o igual que la expresión especificada.

Ejemplo 1: función de piso

SELECT floor(n) FROM Userstocks
Valor de n Salida
1,34 1
-1,34 -2
pi() 3

función ln

La función ln devuelve el valor logarítmico natural (base e) de la expresión especificada.

Ejemplo 1: función ln

SELECT ln(n) FROM PHtable
Valor de n Salida
1 0
10 2,303
1.0E-7 -16,118

función log

La función log devuelve el valor logarítmico con la base especificada para la expresión dada.

Ejemplo 1: función de log

SELECT log(n,b) FROM PHtable
Valor de n Valor de b Salida
2 2 1
81 3 4
255 5 3,443

función log10

La función log10 devuelve el valor logarítmico con la base 10 para la expresión especificada.

Ejemplo 1: función log10

SELECT log10(n) FROM PHtable
Valor de n Salida
1 0
10 1
1.0E-7 -7

función pi

La función pi devuelve el valor pi, es decir, 3.141592653589793.

Ejemplo 1 - función pi

SELECT pi() AS PI FROM Archery

Salida:

+-----------+-------------------+
| PI        | 3.141592653589793 |
+-----------+-------------------+

función de potencia

La función pow devuelve el valor de la primera expresión elevada a la potencia de la segunda expresión.

Ejemplo 1: función de potencia

SELECT pow(n2,n1) FROM PHtable
Valor de n Valor de b Salida
2 4 16
2 0 1
-0,5 4 0,062
0,5 -4 16

función radian

La función radians convierte la expresión especificada de grados a radianes.

Ejemplo 1: función de radianes

SELECT radians(n) FROM Archery
Valor de n Salida
180 3,142
0 0

función aleatoria

La función rand devuelve un número pseudoaleatorio positivo. El valor resultante puede ser mayor o igual que cero y menor que uno.

Ejemplo 1: función aleatoria

SELECT rand() AS RANDOM from Archery WHERE sim=1

Salida:

+-----------+-------------------+
| RANDOM    | 0.891655403699787 |
+-----------+-------------------+

redondear función

La función round redondea el valor de una expresión de entrada a los decimales especificados a la derecha de la coma decimal.

Ejemplo 1 - función redonda

SELECT round(n,d) FROM Userstocks
Valor de n Valor de d Salida
100,331 2 100,33
100,367 2 100,37
111,567 0,5 112
111,567 4 111,567
10,361 0 o no se ha especificado 10
111,331 -2 100
111,331 -4 0
-100,331 2 -100,33
-111,331 -2 -100

función de firma

La función sign devuelve el signo de la expresión especificada, es decir, cero si el argumento es cero, 1 si el argumento es mayor que cero y -1 si el argumento es menor que cero.

Ejemplo 1: función de signo

SELECT sign(n) FROM PHtable
Valor de n Salida
1,89 1
-1,89 -1
0 0
sin(3*pi()/2) -1

función seno

La función sin es una función trigonométrica. La función sin devuelve el seno de un ángulo especificado en radianes.

Ejemplo 1 - función sinusoidal

SELECT sin(n) FROM Archery
Valor de n Salida
radianes(90) 1
pi()/4 0,707
3*pi()/2 -1

función cuadrada de raíz

La función sqrt devuelve la raíz cuadrada de la expresión especificada.

Ejemplo 1 - función de raíz cuadrada

SELECT sqrt(n) FROM Archery
Valor de n Salida
16 4
12.57/pi() 2

función tangente

La función tan es una función trigonométrica. La función tan devuelve la tangente de un ángulo especificado en radianes.

Ejemplo 1: función tangente

SELECT tan(n) FROM Archery
Valor de n Salida
0 0
radianes(90) 1.633123935319537E16,
pi()/4 1

truncar función

La función trunc trunca el valor de una expresión de entrada a los decimales especificados a la derecha de la coma decimal.

Ejemplo 1: función truncar

SELECT trunc(n,d) FROM Userstocks
Valor de n Valor de d Salida
111,567 0 o no se ha especificado 100
111,567 2 100,56
111,567 3 111,567
111,567 -2 100
111,567 -3 0
-111,567 2 -100,567
-111,567 -1 -110

Ejemplos con la API QueryRequest

Puede utilizar la API QueryRequest y aplicar funciones SQL para recuperar datos de una tabla NoSQL similar a las funciones de registro de hora y las funciones de cadena.

Los siguientes fragmentos de código muestran cómo utilizar las funciones matemáticas para consultar la tabla Userstocks.

Para ejecutar la consulta, utilice la API NoSQLHandle.query().

String queryStatement =
    "SELECT stock, " +
    "ceil(units * sellRate - units * buyRate) AS PROFIT, " +
    "abs(units * sellRate - units * buyRate) AS TURNOVER, " +
    "round(abs(units * sellRate - units * buyRate) * 0.5 / 100, 2) " +
    "AS BROKERAGE " +
    "FROM Userstocks";

try (QueryRequest request =
         new QueryRequest().setStatement(queryStatement);
     QueryIterableResult results = handle.queryIterable(request)) {

    for (MapValue row : results) {
        System.out.println(row);
    }
}

Para ejecutar la consulta, utilice el método borneo.NoSQLHandle.query().

query_statement = '''
    SELECT stock,
           ceil(units * sellRate - units * buyRate) AS PROFIT,
           abs(units * sellRate - units * buyRate) AS TURNOVER,
           round(
               abs(units * sellRate - units * buyRate) * 0.5 / 100,
               2
           ) AS BROKERAGE
    FROM Userstocks
'''

request = QueryRequest().set_statement(query_statement)

while True:
    result = handle.query(request)

    for row in result.get_results():
        print(row)

    if request.is_done():
        break

Para ejecutar una consulta, utilice la función Client.Query.

queryStatement := `
    SELECT stock,
           ceil(units * sellRate - units * buyRate) AS PROFIT,
           abs(units * sellRate - units * buyRate) AS TURNOVER,
           round(
               abs(units * sellRate - units * buyRate) * 0.5 / 100,
               2
           ) AS BROKERAGE
    FROM Userstocks`

prepareRequest := &nosqldb.PrepareRequest{
    Statement: queryStatement,
}

prepareResult, err := client.Prepare(prepareRequest)
if err != nil {
    fmt.Println("Prepare failed:", err)
    return
}

queryRequest := &nosqldb.QueryRequest{
    PreparedStatement: &prepareResult.PreparedStatement,
}

for {
    queryResult, err := client.Query(queryRequest)
    if err != nil {
        fmt.Println("Query failed:", err)
        return
    }

    rows, err := queryResult.GetResults()
    if err != nil {
        fmt.Println("Unable to get results:", err)
        return
    }

    for _, row := range rows {
        fmt.Println(jsonutil.AsJSON(row.Map()))
    }

    if queryRequest.IsDone() {
        break
    }
}

Para ejecutar una consulta, utilice el método query.

const queryStatement = `
    SELECT stock,
           ceil(units * sellRate - units * buyRate) AS PROFIT,
           abs(units * sellRate - units * buyRate) AS TURNOVER,
           round(
               abs(units * sellRate - units * buyRate) * 0.5 / 100,
               2
           ) AS BROKERAGE
    FROM Userstocks`;

const options = {};

do {
    const result = await handle.query(queryStatement, options);

    for (const row of result.rows) {
        console.log(row);
    }

    options.continuationKey = result.continuationKey;
} while (options.continuationKey);

Para ejecutar una consulta, puede llamar al método QueryAsync o llamar al método GetQueryAsyncEnumerable e iterar sobre el enumerable asíncrono resultante.

private const string QueryStatement = @"
    SELECT stock,
           ceil(units * sellRate - units * buyRate) AS PROFIT,
           abs(units * sellRate - units * buyRate) AS TURNOVER,
           round(
               abs(units * sellRate - units * buyRate) * 0.5 / 100,
               2
           ) AS BROKERAGE
    FROM Userstocks";

var queryEnumerable =
    client.GetQueryAsyncEnumerable(QueryStatement);

await foreach (var result in queryEnumerable)
{
    foreach (var row in result.Rows)
    {
        Console.WriteLine(row.ToJsonString());
    }
}

Otros ejemplos

Aprender a utilizar funciones matemáticas en aplicaciones.

Ejemplo 1 - Aplicación de funciones matemáticas para recuperar transacciones intradía de una aplicación de negociación

Considere una tabla Userstocks que contenga transacciones intradía de un comerciante de acciones en una aplicación de negociación.

El DDL de la tabla es el siguiente:

CREATE TABLE Userstocks (id INTEGER,
                     stock STRING,
                     units INTEGER,
                     buyRate DOUBLE,
                     sellRate DOUBLE,
PRIMARY KEY (id))

El campo id contiene el ID de la empresa, el campo stock contiene el nombre de la empresa en la que el usuario tiene opciones de acciones, el campo units contiene el número de acciones propiedad del usuario, buyRate es el precio al que el usuario ha comprado las acciones y sellRate es el precio al que el usuario vende sus acciones.

Insertar filas de ejemplo en la tabla:

INSERT into Userstocks VALUES (1, "company1", 100, 10.2, 11.5)
INSERT into Userstocks VALUES (2, "company2", 20, 15, 14.7)

Puede utilizar la siguiente consulta para aplicar funciones matemáticas y recuperar los detalles de transacción necesarios de la tabla:

SELECT stock,
ceil(units*sellRate-units*buyRate) AS PROFIT,
abs(units*sellRate-units*buyRate) AS TURNOVER,
round(abs(units*sellRate-units*buyRate)*0.5/100, 2) AS BROKERAGE
FROM Userstocks

Explicación: en la consulta anterior, recupera la rotación del día, las ganancias/pérdidas y los cargos de corretaje. Calcula las ganancias/pérdidas mediante las expresiones aritméticas proporcionadas y aplica la función de techo para obtener el resultado como el valor entero más cercano. Calcula las ganancias/pérdidas y aplica la funciónabs para calcular la rotación de cada transacción. Los cargos de corretaje se calculan aplicando el 0,5 % en cada rotación y redondeando el resultado a dos decimales mediante la función round.

Salida:

{"stock":"company2","PROFIT":-6.0,"TURNOVER":6.0,"BROKERAGE":0.03}
{"stock":"company1","PROFIT":131.0,"TURNOVER":130.0000000000001,"BROKERAGE":0.65}

Ejemplo 2 - Aplicar funciones matemáticas para calcular la distancia de disparo en una aplicación de juego

Considere una tabla Archery que contenga datos para el disparo de destino en una aplicación de juego.

El DDL de la tabla es el siguiente:

CREATE TABLE Archery (sim INTEGER,
                     angle DOUBLE,
                     elevation DOUBLE,
PRIMARY KEY (sim) )

El campo sim identifica el conteo de simulación, el campo angle incluye diferentes ángulos (en grados) a los que un jugador puede apuntar a un objetivo, el campo elevation contiene la altura (en metros) en la que se coloca el objetivo.

Insertar filas de ejemplo en la tabla:

INSERT INTO Archery VALUES (1, 30, 50)
INSERT INTO Archery VALUES (2, 45, 50)
INSERT INTO Archery VALUES (3, 70, 95)

Puede aplicar funciones matemáticas en la siguiente consulta para calcular la distancia de disparo para varios ángulos y elevaciones del objetivo.

SELECT sim, trunc(elevation/sin(radians(angle)),2) AS SLOPE FROM Archery ORDER BY
    sim

Explicación: para alcanzar un objetivo colocado en una determinada elevación, el jugador apunta a un ángulo y dispara una cierta distancia. Estos elementos forman un lado de un triángulo de ángulo recto, un ángulo agudo y una hipotenusa. En esta consulta, se calcula la distancia de disparo para varias combinaciones de la elevación del objetivo y los ángulos en función de la posición del jugador desde el objetivo. Utilice la función de radianes para convertir los ángulos a radianes y calcular el valor sinusoidal mediante la función sinusoidal. La elevación se divide entre el valor seno para calcular la distancia y truncar el resultado a dos decimales mediante la función truncar.

Salida:

{"sim":1,"SLOPE ":100.0}
{"sim":2,"SLOPE ":70.71}
{"sim":3,"SLOPE ":101.09}

Ejemplo 3 - Utilizar las funciones matemáticas para calcular el valor PH de una solución determinada

Considere una concentración de iones de hidrógeno que contenga PHtable para diferentes soluciones.

El DDL de la tabla es el siguiente:

CREATE TABLE PHtable (id INTEGER,
                    sampleName STRING,
                    hIons DOUBLE,
                    phValue DOUBLE,
PRIMARY KEY (id) )

El campo id contiene el identificador de la muestra de solución, el campo sampleName contiene el nombre de la muestra dada, el campo hIons es la concentración de iones de hidrógeno en moles por litro del líquido, y el campo phValue es el valor PH de la solución. Puede utilizar el valor hIons para calcular el valor phValue de una solución. Inicialice la columna phValue en NULL al insertar datos en la tabla.

Insertar filas de ejemplo en la tabla:

INSERT INTO PHtable VALUES (1, "sample1", 0.0063095734448019, NULL)
INSERT INTO PHtable VALUES (2, "sample2", 5.0118723362727E-9, NULL)
INSERT INTO PHtable VALUES (3, "sample3", 1.0E-7, NULL)

Puede utilizar las funciones matemáticas para calcular el valor PH de una solución determinada y actualizar la tabla mediante la siguiente consulta:

UPDATE PHtable SET phValue=trunc((log10(1/hIons)),1) where id=1 RETURNING
    *

Explicación: el valor PH indica la concentración de ácidos o bases en una solución. En esta consulta, se utiliza la función log10 para calcular el valor PH de una solución mediante la fórmula PH=log10(1/hIons). Como el valor de retorno de la función es doble, se utiliza la función truncar para truncar el resultado a un decimal. La sentencia UPDATE se utiliza para definir el valor de PH resultante en el campo phValue para la solución especificada.

Salida:

{"id":1,"sampleName":"sample1","hIons":0.0063095734448019,"phValue":2.2}

También puede utilizar las funciones matemáticas en la cláusula WHERE. En este ejemplo, encontrará las muestras ácidas (PH < 7) mediante la siguiente consulta:

SELECT sampleName AS ACIDIC FROM PHtable WHERE trunc((log10(1/hIons)),1) <
    7.0

Salida:

{"ACIDIC":"sample1"}