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:
-
Os nomes das funções matemáticas fazem distinção entre maiúsculas e minúsculas.
-
Todas as funções matemáticas esperam tipos numéricos (inteiro, longo, flutuante, duplo e número) como argumentos. Essas funções retornam NULL nos seguintes casos. Aqui, o NULL se refere a SQL NULL, a menos que especificado de outra forma.
-
Qualquer um dos argumentos é resolvido como NULL.
-
Qualquer um dos argumentos é um campo em uma coluna JSON cujo valor é NULL, ou seja, JSON NULL.
-
Qualquer um dos argumentos é um campo em uma coluna JSON, que não existe.
-
Qualquer um dos argumentos é um campo na coleção JSON, que não existe.
-
Qualquer um dos argumentos não é resolvido para um tipo numérico.
-
-
Ao usar funções trigonométricas, como sin(n), cos(n), e assim por diante, você deve especificar o valor de entrada em radianos. Você pode converter um ângulo de graus em radianos usando a função radians(n). Da mesma forma, para funções trigonométricas inversas, como asin(n), acos(n), e assim por diante, você pode converter o valor dos radianos resultantes em graus usando a função degrees(n).
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"}