Usando Operações Matemáticas em Consultas

Saiba mais sobre as funções Matemáticas suportadas no Oracle NoSQL Database Cloud Service.

As funções matemáticas são usadas para executar cálculos matemáticos nos argumentos de entrada. Aqui, os argumentos fornecidos são expressões que se resolvem para números.

Você pode chamar as funções matemáticas nas cláusulas SELECT/WHERE e também em outras instruções do Oracle NoSQL nas quais chamadas de funções são permitidas na sintaxe. Por exemplo, você pode fornecer funções matemáticas como argumentos para Usando Funções Agregadas.

As seguintes funções são suportadas no Oracle NoSQL Database Cloud Service:

Tabela 1 - Funções matemáticas

Função Descrição
abs(n) Retorna o valor absoluto de n.
acos(n) Retorna o cosseno do arco de n expresso em radianos.
asin(n) Retorna o seno do arco de n expresso em radianos.
atan(n) Retorna o arco tangente de n expresso em radianos.
atan2(n1,n2) Retorna o arco tangente dos argumentos n1 e n2 expressos em radianos.
tecto(n) Retorna o menor inteiro que é maior ou igual a n.
cos(n) Retorna o cosseno de um ângulo n especificado em radianos.
berço(n) Retorna a cotangente de um ângulo n especificado em radianos.
graus(n) Converte n de radianos em graus.
e() Retorna o valor do número de Euler e.
exp(n) Retorna o valor exponencial da expressão n.
chão(n) Retorna o maior inteiro que é menor ou igual a n.
ln(n) Retorna o valor logarítmico natural (base e) de n.
log(n,b) Retorna o valor b de base logarítmica de n.
log10(n) Retorna o valor logarítmico base 10 de n.
pi() Retorna o valor de pi.
potência (n2,n1) Retorna o valor de n2 aumentado para a potência n1.
radianos(n) Converte n de graus em radianos.
rand() Retorna um número pseudoaleatório entre zero e um.
round(n [,d]) Arredonda n para d casas à direita do ponto decimal.
placa(n) Retorna o sinal de n.
sin(n) Retorna o seno de um ângulo n especificado em radianos.
sqrt(n) Retorna a raiz quadrada de n.
tan(n) Retorna a tangente de um ângulo n especificado em radianos.
trunc(n [,d]) Retorna o valor de n truncado em d casas decimais.

Observação:

Para acompanhar os exemplos nas seções, você pode criar as tabelas e carregar dados conforme descrito na seção Exemplos Adicionais.

função abs

A função abs retorna o valor absoluto da expressão de entrada.

Exemplo 1 - função abs

SELECT abs(n) FROM Userstocks
Valor de n Saída
10 10
-10 10
1,67 1,67
-1,67 1,67

função de cosseno de arco

A função acos é uma função trigonométrica inversa. A função acos retorna o cosseno do arco (inverso do cosseno) da expressão de entrada.

Exemplo 1 - função de cosseno de arco

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

função do seno do arco

A função asin é uma função trigonométrica inversa. A função asin retorna o arco seno (inverso de seno) da expressão de entrada.

Exemplo 1 - função senoidal de arco

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

função arc tan

A função atan é uma função trigonométrica inversa. A função atan retorna a tangente de arco (inversa da tangente) da expressão de entrada.

Exemplo 1 - função arc tan

SELECT atan(n) FROM Archery
Valor de n Saída
1 0,785
m²(3) 1,047

função arc tan2

A função atan2 é uma função trigonométrica inversa. A função atan2 é uma função tangente de arco de dois argumentos (inverso de tan), que retorna a tangente de arco de uma coordenada ou ponto no espaço bidimensional (n1, n2) calculado como atan(n2/n1).

Exemplo 1 - função arc tan2

SELECT atan2(n1,n2) FROM Archery
Valor de n1 Valor de n2 Saída
1 1 0,785
1 m²(3) 1,047
2 0 1,571

Função ceil

A função ceil retorna o menor inteiro que é maior ou igual à expressão especificada.

Exemplo 1 - função de teto

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

função cosseno

A função cos é uma função trigonométrica. A função cos retorna o cosseno de um ângulo especificado em radianos.

Exemplo 1 - função cosseno

SELECT cos(n) FROM Archery
Valor de n Saída
0 1
radianos(90) 17-6,123233995736766E
pi() -1

função cotangent

A função cot é uma função trigonométrica. A função cot retorna a cotangente de um ângulo especificado em radianos.

Exemplo 1 - função cotangente

SELECT cot(n) FROM Archery
Valor de n Saída
0 Infinito
radianos(90) 17-6,123233995736766E
4/pi() 1

função graus

A função degrees converte a expressão especificada de radianos em graus.

Exemplo 1 - função graus

SELECT degrees(n) FROM Archery
Valor de n Saída
pi()/2 90
0 0

Função Euler

A função e retorna o valor do número do Euler e, ou seja, 2.718281828459045.

Exemplo 1 - Função Euler

SELECT e() AS EULER FROM Archery

Saída:

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

Função exp

A função exp retorna o valor exponencial da expressão fornecida, ou seja, e elevado à potência da expressão especificada. Aqui, e é a base do logaritmo natural e tem o valor 2.718281828459045.

Exemplo 1 - função exp

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

função do assoalho

A função floor retorna o maior número inteiro que é menor ou igual à expressão especificada.

Exemplo 1 - função de piso

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

Função ln

A função ln retorna o valor logarítmico natural (base e) da expressão especificada.

Exemplo 1 - função ln

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

Função log

A função log retorna o valor logarítmico com a base especificada para a expressão fornecida.

Exemplo 1 - função de log

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

função log10

A função log10 retorna o valor logarítmico com base 10 para a expressão especificada.

Exemplo 1 - função log10

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

função pi

A função pi retorna o valor de pi, ou seja, 3.141592653589793.

Exemplo 1 - função pi

SELECT pi() AS PI FROM Archery

Saída:

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

função de poder

A função pow retorna o valor da primeira expressão elevada à potência da segunda expressão.

Exemplo 1 - função de potência

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

função radians

A função radians converte a expressão especificada de graus em radianos.

Exemplo 1 - função radianos

SELECT radians(n) FROM Archery
Valor de n Saída
180 3,142
0 0

função aleatória

A função rand retorna um número pseudoaleatório positivo. O valor resultante pode ser maior que ou igual a zero e menor que um.

Exemplo 1 - função aleatória

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

Saída:

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

função de arredondamento

A função round arredonda o valor de uma expressão de entrada para as casas decimais especificadas à direita do ponto decimal.

Exemplo 1 - função arredondada

SELECT round(n,d) FROM Userstocks
Valor de n Valor de d Saída
100,331 2 100,33
100,367 2 100,37
111,567 0,5 112
111,567 4 111,567
10,361 0 ou não especificado 10
111,331 -2 100
111,331 -4 0
-100,331 2 -100,33
-111,331 -2 -100

função de sinal

O sign retorna o sinal da expressão especificada, ou seja, zero se o argumento for zero, 1 se o argumento for maior que zero e -1 se o argumento for menor que zero.

Exemplo 1 - função de sinal

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

função seno

A função sin é uma função trigonométrica. A função sin retorna o seno de um ângulo especificado em radianos.

Exemplo 1 - função seno

SELECT sin(n) FROM Archery
Valor de n Saída
radianos(90) 1
pi()/4 0,707
2/3*pi() -1

função de raiz quadrada

A função sqrt retorna a raiz quadrada da expressão especificada.

Exemplo 1 - função de raiz quadrada

SELECT sqrt(n) FROM Archery
Valor de n Saída
16 4
12,57/pi() 2

função tangente

A função tan é uma função trigonométrica. A função tan retorna a tangente de um ângulo especificado em radianos.

Exemplo 1 - função tangente

SELECT tan(n) FROM Archery
Valor de n Saída
0 0
radianos(90) 1,633123935319537E16
pi()/4 1

função truncar

A função trunc trunca o valor de uma expressão de entrada para as casas decimais especificadas à direita do ponto decimal.

Exemplo 1 - função truncar

SELECT trunc(n,d) FROM Userstocks
Valor de n Valor de d Saída
111,567 0 ou não 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

Exemplos de uso da API QueryRequest

Você pode usar a API QueryRequest e aplicar funções SQL para extrair dados de uma tabela NoSQL semelhante a Funções de timestamp e Funções de string.

Os trechos de código a seguir mostram como usar funções matemáticas para consultar a tabela Userstocks.

Para executar sua consulta, use a 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 executar sua consulta, use o 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 executar uma consulta, use a função 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 executar uma consulta, use o 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 executar uma consulta, você pode chamar o método QueryAsync ou chamar o método GetQueryAsyncEnumerable e iterar sobre o enumerável assí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());
    }
}

Exemplos Adicionais

Aprenda a usar funções matemáticas em aplicativos.

Exemplo 1 - Aplicar funções matemáticas para recuperar transações intradias de um aplicativo de negociação

Considere uma tabela Userstocks contendo transações intradias de um trader de ações em um aplicativo de negociação.

A tabela DDL é a seguinte:

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

O campo id contém o ID da empresa, o campo stock contém o nome da empresa em que o usuário tem opções de ações, o campo units contém o número de ações de propriedade do usuário, buyRate é o preço pelo qual o usuário adquiriu as ações e sellRate é o preço pelo qual o usuário vende suas ações.

Insira exemplos de linhas na tabela:

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

Você pode usar a seguinte consulta para aplicar funções matemáticas e recuperar os detalhes de transação necessários da tabela:

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

Explicação: Na consulta acima, você extrai os encargos de rotatividade, lucro/perda e corretagem do dia. Você calcula o lucro/perda usando as expressões aritméticas fornecidas e aplica a função tecto para obter o resultado como o valor inteiro mais próximo. Você calcula o lucro/perda e aplica a função Abs para calcular a rotatividade de cada transação. Você calcula as cobranças de corretagem aplicando 0,5% em cada rotatividade e arredonda o resultado para duas casas decimais usando a função de arredondamento.

Saída:

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

Exemplo 2 - Aplicar funções matemáticas para calcular a distância de disparo em um aplicativo de jogo

Considere uma tabela Archery contendo dados para disparo de alvo em um aplicativo de jogos.

A tabela DDL é a seguinte:

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

O campo sim identifica a contagem de simulações, o campo angle inclui diferentes ângulos (em graus) em que um jogador pode apontar para um alvo, o campo elevation contém a altura (em metros) em que o alvo é colocado.

Insira exemplos de linhas na tabela:

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

Você pode aplicar funções matemáticas na consulta a seguir para calcular a distância de disparo para vários ângulos e elevações do alvo.

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

Explicação: Para acertar um alvo colocado em uma certa elevação, o jogador aponta para um ângulo e dispara uma certa distância. Estes elementos formam um lado de um triângulo retângulo, um ângulo agudo e uma hipotenusa. Nesta consulta, você calcula a distância de disparo para várias combinações de elevação do alvo e ângulos com base na posição do jogador do alvo. Use a função de radianos para converter os ângulos em radianos e calcular o valor seno usando a função seno. Você divide a elevação pelo valor senoidal para calcular a distância e trunca o resultado em duas casas decimais usando a função truncate.

Saída:

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

Exemplo 3 - Usar as funções matemáticas para calcular o valor de PH de uma determinada solução

Considere uma concentração de PHtable contendo íons de hidrogênio para diferentes soluções.

A tabela DDL é a seguinte:

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

O campo id contém o identificador da amostra da solução, o campo sampleName contém o nome da amostra fornecida, o campo hIons é a concentração de íons hidrogênio em moles por litro do líquido e o campo phValue é o valor de PH da solução. Você pode usar o valor hIons para calcular o phValue de uma solução. Você inicializa a coluna phValue como NULL ao inserir dados na tabela.

Insira exemplos de linhas na tabela:

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)

Você pode usar as funções matemáticas para calcular o valor PH de uma determinada solução e atualizar a tabela usando a seguinte consulta:

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

Explicação: O valor de PH indica a força de ácidos ou bases em uma solução. Nesta consulta, você usa a função log10 para calcular o valor de PH de uma solução usando a fórmula PH=log10(1/hIons). Como o valor de retorno da função é duplo, você usa a função truncate para truncar o resultado para uma casa decimal. Você usa a Instrução UPDATE para definir o valor PH resultante no campo phValue para a solução especificada.

Saída:

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

Você também pode usar as funções matemáticas na cláusula WHERE. Neste exemplo, você encontra as amostras ácidas (PH < 7) usando a seguinte consulta:

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

Saída:

{"ACIDIC":"sample1"}