Utilizzo di operazioni matematiche nelle query
Scopri le funzioni matematiche supportate in Oracle NoSQL Database Cloud Service.
Le funzioni matematiche vengono utilizzate per eseguire calcoli matematici sugli argomenti di input. Qui, gli argomenti forniti sono espressioni che risolvono in numeri.
È possibile richiamare le funzioni matematiche dalle clausole SELECT/WHERE e anche da altre istruzioni Oracle NoSQL in cui le chiamate di funzione sono consentite nella sintassi. Ad esempio, è possibile fornire funzioni matematiche come argomenti a Utilizzo di funzioni aggregate.
In Oracle NoSQL Database Cloud Service sono supportate le funzioni riportate di seguito.
Tabella 1 - Funzioni matematiche
| Funzione | Descrizione |
|---|---|
| ass(n) | Restituisce il valore assoluto di n. |
| acos(n) | Restituisce l'arco coseno di n espresso in radianti. |
| asin(n) | Restituisce l'arco seno di n espresso in radianti. |
| atan(n) | Restituisce la tangente di arco di n espressa in radianti. |
| atan2(n1,n2) | Restituisce l'arc tangente degli argomenti n1 e n2 espressa in radianti. |
| ceil(n) | Restituisce il numero intero più basso maggiore o uguale a n. |
| cos(n) | Restituisce il coseno di un angolo n specificato nei radianti. |
| culla(n) | Restituisce la cotangente di un angolo n specificato nei radianti. |
| gradi(n) | Converte n da radianti a gradi. |
| e() | Restituisce il valore del numero Euler e. |
| esp(n) | Restituisce il valore esponenziale dell'espressione n. |
| pavimento(n) | Restituisce il numero intero più grande minore o uguale a n. |
| ln(n) | Restituisce il valore logaritmico naturale (base e) di n. |
| log(n,b) | Restituisce il valore b della base logaritmica di n. |
| log10(n) | Restituisce il valore 10 di base logaritmica di n. |
| pi() | Restituisce il valore di pi. |
| potenza(n2,n1) | Restituisce il valore di n2 elevato all'alimentazione n1. |
| radianti(n) | Converte n da gradi a radianti. |
| Rand() | Restituisce un numero pseudo casuale compreso tra zero e uno. |
| round(n [,d]) | Arrotonda le posizioni da n a d a destra del separatore decimale. |
| segno(n) | Restituisce il segno di n. |
| sin(n) | Restituisce il seno di un angolo n specificato nei radianti. |
| sqrt(n) | Restituisce la radice quadrata di n. |
| abbronzatura(n) | Restituisce la tangente di un angolo n specificato nei radianti. |
| tronc(n [,d]) | Restituisce il valore di n troncato alle posizioni decimali d. |
Nota:
-
Per i nomi delle funzioni matematiche viene fatta distinzione tra maiuscole e minuscole.
-
Tutte le funzioni matematiche prevedono tipi numerici (integer, long, float, double e number) come argomenti. Queste funzioni restituiscono NULL nei seguenti casi. Qui, il NULL si riferisce a SQL NULL se non diversamente specificato.
-
Uno qualsiasi degli argomenti viene risolto in NULL.
-
Uno qualsiasi degli argomenti è un campo in una colonna JSON il cui valore è NULL, ovvero JSON NULL.
-
Uno qualsiasi degli argomenti è un campo in una colonna JSON, che non esiste.
-
Uno qualsiasi degli argomenti è un campo della raccolta JSON, che non esiste.
-
Uno qualsiasi degli argomenti non viene risolto in un tipo numerico.
-
-
Durante l'utilizzo di funzioni trigonometriche come sin(n), cos(n) e così via, è necessario specificare il valore di input nei radianti. È possibile convertire un angolo da gradi a radianti utilizzando la funzione radians(n). Analogamente, per le funzioni trigonometriche inverse come asin(n), acos(n) e così via, è possibile convertire il valore dei radianti risultanti in gradi utilizzando la funzione degrees(n).
Per seguire gli esempi riportati nelle sezioni, è possibile creare le tabelle e caricare i dati come descritto nella sezione Esempi aggiuntivi.
funzione abs
La funzione abs restituisce il valore assoluto dell'espressione di input.
Esempio 1 - funzione abs
SELECT abs(n) FROM Userstocks
| Valore di n | Output |
|---|---|
| 10 | 10 |
| -10 | 10 |
| 1,67 | 1,67 |
| -1,67 | 1,67 |
funzione arc cosine
La funzione acos è una funzione trigonometrica inversa. La funzione acos restituisce l'arco coseno (inverso del coseno) dell'espressione di input.
Esempio 1 - funzione arc cosine
SELECT acos(n) FROM Archery
| Valore di n | Output |
|---|---|
| 1 | 0 |
| 0 | 1,571 |
| sqrt(3)/2 | 0,524 |
| 0,5 | 1,047 |
| -1 | 3,142 |
funzione arco sinusoidale
La funzione asin è una funzione trigonometrica inversa. La funzione asin restituisce l'arc sine (inverso di sine) dell'espressione di input.
Esempio 1 - funzione arc sine
SELECT asin(n) FROM Archery
| Valore di n | Output |
|---|---|
| 1 | 1,571 |
| sqrt(3)/2 | 1,047 |
| 0,5 | 0,524 |
| -1 | -1,571 |
funzione Arc Tan
La funzione atan è una funzione trigonometrica inversa. La funzione atan restituisce l'arc tangente (inverso della tangente) dell'espressione di input.
Esempio 1 - funzione Arc TAN
SELECT atan(n) FROM Archery
| Valore di n | Output |
|---|---|
| 1 | 0,785 |
| sqrt(3) | 1,047 |
funzione arc tan2
La funzione atan2 è una funzione trigonometrica inversa. La funzione atan2 è una funzione arc tangent a due argomenti (inverso di tan), che restituisce l'arc tangente di una coordinata o di un punto in uno spazio bidimensionale (n1, n2) calcolato come atan(n2/n1).
Esempio 1 - funzione arc tan2
SELECT atan2(n1,n2) FROM Archery
| Valore di n1 | Valore di n2 | Output |
|---|---|---|
| 1 | 1 | 0,785 |
| 1 | sqrt(3) | 1,047 |
| 2 | 0 | 1,571 |
funzione ceil
La funzione ceil restituisce il numero intero più piccolo maggiore o uguale all'espressione specificata.
Esempio 1 - funzione ceil
SELECT ceil(n) FROM Userstocks
| Valore di n | Output |
|---|---|
| 1,34 | 2 |
| -1,34 | -1 |
| pi() | 4 |
funzione coseno
La funzione cos è una funzione trigonometrica. La funzione cos restituisce il coseno di un angolo specificato nei radianti.
Esempio 1 - funzione coseno
SELECT cos(n) FROM Archery
| Valore di n | Output |
|---|---|
| 0 | 1 |
| radianti(90) | 6.123233995736766E-17 |
| pi() | -1 |
funzione cotangente
La funzione cot è una funzione trigonometrica. La funzione cot restituisce la cotangente di un angolo specificato nei radianti.
Esempio 1 - funzione cotangente
SELECT cot(n) FROM Archery
| Valore di n | Output |
|---|---|
| 0 | Infinito |
| radianti(90) | 6.123233995736766E-17 |
| pi()/4 | 1 |
funzione gradi
La funzione degrees converte l'espressione specificata da radianti in gradi.
Esempio 1 - funzione gradi
SELECT degrees(n) FROM Archery
| Valore di n | Output |
|---|---|
| pi()/2 | 90 |
| 0 | 0 |
Funzione di Eulero
La funzione e restituisce il valore di Euler numero e, ovvero 2.718281828459045.
Esempio 1 - Funzione Eulero
SELECT e() AS EULER FROM Archery
Output:
+-----------+-------------------+
| EULER | 2.718281828459045 |
+-----------+-------------------+
funzione exp
La funzione exp restituisce il valore esponenziale dell'espressione specificata, ovvero e elevato alla potenza dell'espressione specificata. Qui, e è la base del logaritmo naturale e ha il valore 2.718281828459045.
Esempio 1 - funzione exp
SELECT exp(n) FROM PHtable
| Valore di n | Output |
|---|---|
| 0 | 1 |
| 2 | 7,389 |
| -2 | 0,135 |
funzione del pavimento
La funzione floor restituisce il numero intero più grande minore o uguale all'espressione specificata.
Esempio 1 - funzione del pavimento
SELECT floor(n) FROM Userstocks
| Valore di n | Output |
|---|---|
| 1,34 | 1 |
| -1,34 | -2 |
| pi() | 3 |
Nella funzione
La funzione ln restituisce il valore logico naturale (base e) dell'espressione specificata.
Esempio 1 - funzione ln
SELECT ln(n) FROM PHtable
| Valore di n | Output |
|---|---|
| 1 | 0 |
| 10 | 2,303 |
| 1.0E-7 | -16,118 |
funzione log
La funzione log restituisce il valore logaritmico con la base specificata per l'espressione specificata.
Esempio 1 - funzione di log
SELECT log(n,b) FROM PHtable
| Valore di n | Valore di b | Output |
|---|---|---|
| 2 | 2 | 1 |
| 81 | 3 | 4 |
| 255 | 5 | 3,443 |
funzione log10
La funzione log10 restituisce il valore logaritmico con base 10 per l'espressione specificata.
Esempio 1 - funzione log10
SELECT log10(n) FROM PHtable
| Valore di n | Output |
|---|---|
| 1 | 0 |
| 10 | 1 |
| 1.0E-7 | -7 |
funzione pi
La funzione pi restituisce il valore di pi, ovvero 3.141592653589793.
Esempio 1 - funzione pi
SELECT pi() AS PI FROM Archery
Output:
+-----------+-------------------+
| PI | 3.141592653589793 |
+-----------+-------------------+
funzione di alimentazione
La funzione pow restituisce il valore della prima espressione elevata alla potenza della seconda espressione.
Esempio 1 - funzione di alimentazione
SELECT pow(n2,n1) FROM PHtable
| Valore di n | Valore di b | Output |
|---|---|---|
| 2 | 4 | 16 |
| 2 | 0 | 1 |
| -0,5 | 4 | 0,062 |
| 0,5 | -4 | 16 |
funzione radianti
La funzione radians converte l'espressione specificata da gradi a radianti.
Esempio 1 - funzione radianti
SELECT radians(n) FROM Archery
| Valore di n | Output |
|---|---|
| 180 | 3,142 |
| 0 | 0 |
funzione casuale
La funzione rand restituisce un numero pseudo-casuale positivo. Il valore risultante può essere maggiore o uguale a zero e minore di uno.
Esempio 1 - funzione casuale
SELECT rand() AS RANDOM from Archery WHERE sim=1
Output:
+-----------+-------------------+
| RANDOM | 0.891655403699787 |
+-----------+-------------------+
funzione round
La funzione round arrotonda il valore di un'espressione di input alle posizioni decimali specificate a destra del separatore decimale.
Esempio 1 - funzione rotonda
SELECT round(n,d) FROM Userstocks
| Valore di n | Valore di d | Output |
|---|---|---|
| 100,331 | 2 | 100,33 |
| 100,367 | 2 | 100,37 |
| 111,567 | 0,5 | 112 |
| 111,567 | 4 | 111,567 |
| 10,361 | 0 o non specificato | 10 |
| 111,331 | -2 | 100 |
| 111,331 | -4 | 0 |
| -100,331 | 2 | -100,33 |
| -111,331 | -2 | -100 |
funzione segno
La funzione sign restituisce il segno dell'espressione specificata, ovvero zero se l'argomento è zero, 1 se l'argomento è maggiore di zero e -1 se l'argomento è minore di zero.
Esempio 1 - funzione di segno
SELECT sign(n) FROM PHtable
| Valore di n | Output |
|---|---|
| 1,89 | 1 |
| -1,89 | -1 |
| 0 | 0 |
| sin(3*pi()/2) | -1 |
funzione seno
La funzione sin è una funzione trigonometrica. La funzione sin restituisce il seno di un angolo specificato nei radianti.
Esempio 1 - funzione sinusoidale
SELECT sin(n) FROM Archery
| Valore di n | Output |
|---|---|
| radianti(90) | 1 |
| pi()/4 | 0,707 |
| 3*pi()/2 | -1 |
funzione Sqrt
La funzione sqrt restituisce la radice quadrata dell'espressione specificata.
Esempio 1 - funzione radice quadrata
SELECT sqrt(n) FROM Archery
| Valore di n | Output |
|---|---|
| 16 | 4 |
| 12.57/pi() | 2 |
funzione tangente
La funzione tan è una funzione trigonometrica. La funzione tan restituisce la tangente di un angolo specificato nei radianti.
Esempio 1 - funzione tangente
SELECT tan(n) FROM Archery
| Valore di n | Output |
|---|---|
| 0 | 0 |
| radianti(90) | 1.633123935319537E16 |
| pi()/4 | 1 |
funzione truncate
La funzione trunc tronca il valore di un'espressione di input alle posizioni decimali specificate a destra del separatore decimale.
Esempio 1 - funzione tronca
SELECT trunc(n,d) FROM Userstocks
| Valore di n | Valore di d | Output |
|---|---|---|
| 111,567 | 0 o non specificato | 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 |
Esempi che utilizzano l'API QueryRequest
È possibile utilizzare l'API QueryRequest e applicare funzioni SQL per recuperare i dati da una tabella NoSQL simile alle funzioni indicatore orario e alle funzioni stringa.
I seguenti frammenti di codice mostrano come utilizzare le funzioni matematiche per eseguire query sulla tabella Userstocks.
Per eseguire la query, utilizzare l'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);
}
}
Per eseguire la query, utilizzare il metodo 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
Per eseguire una query, utilizzare la funzione 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
}
}
Per eseguire una query, utilizzare il metodo 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);
Per eseguire una query, è possibile chiamare il metodo QueryAsync o chiamare il metodo GetQueryAsyncEnumerable e ripetere l'enumerazione asincrona risultante.
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());
}
}
Esempi aggiuntivi
Impara a utilizzare le funzioni matematiche nelle applicazioni.
Esempio 1 - Applicazione di funzioni matematiche per recuperare transazioni intragiornaliere da un'applicazione commerciale
Si consideri una tabella Userstocks contenente le transazioni infragiornaliere di un operatore azionario in un'applicazione di trading.
La tabella DDL è la seguente:
CREATE TABLE Userstocks (id INTEGER,
stock STRING,
units INTEGER,
buyRate DOUBLE,
sellRate DOUBLE,
PRIMARY KEY (id))
Il campo id contiene l'ID della società, il campo stock contiene il nome della società in cui l'utente ha stock option, il campo units contiene il numero di azioni di proprietà dell'utente, buyRate è il prezzo al quale l'utente ha acquistato le azioni e sellRate è il prezzo al quale l'utente vende le sue azioni.
Inserire righe di esempio nella tabella:
INSERT into Userstocks VALUES (1, "company1", 100, 10.2, 11.5)
INSERT into Userstocks VALUES (2, "company2", 20, 15, 14.7)
È possibile utilizzare la seguente query per applicare funzioni matematiche e recuperare i dettagli di transazione richiesti dalla tabella:
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
Spiegazione: nella query precedente è possibile recuperare il ricambio del giorno, i profitti/perdite e gli addebiti di intermediazione. Il profitto/perdita viene calcolato utilizzando le espressioni aritmetiche specificate e si applica la funzione del soffitto per ottenere il risultato come valore intero più vicino. È possibile calcolare il profitto/perdita e applicare la funzione abs per calcolare il ricambio per ogni transazione. È possibile calcolare gli addebiti di intermediazione applicando lo 0,5% su ogni ricambio di personale e arrotondando il risultato a due posizioni decimali utilizzando la funzione arrotondamento.
Output:
{"stock":"company2","PROFIT":-6.0,"TURNOVER":6.0,"BROKERAGE":0.03}
{"stock":"company1","PROFIT":131.0,"TURNOVER":130.0000000000001,"BROKERAGE":0.65}
Esempio 2 - Applicare funzioni matematiche per calcolare la distanza di scatto in un'applicazione di gioco
Si consideri una tabella Archery contenente i dati per le riprese di destinazione in un'applicazione di gioco.
La tabella DDL è la seguente:
CREATE TABLE Archery (sim INTEGER,
angle DOUBLE,
elevation DOUBLE,
PRIMARY KEY (sim) )
Il campo sim identifica il conteggio della simulazione, il campo angle include angoli diversi (in gradi) a cui un giocatore può puntare su un bersaglio, il campo elevation contiene l'altezza (in metri) a cui è posizionato il bersaglio.
Inserire righe di esempio nella tabella:
INSERT INTO Archery VALUES (1, 30, 50)
INSERT INTO Archery VALUES (2, 45, 50)
INSERT INTO Archery VALUES (3, 70, 95)
È possibile applicare funzioni matematiche nella query seguente per calcolare la distanza di ripresa per vari angoli e quote altimetriche della destinazione.
SELECT sim, trunc(elevation/sin(radians(angle)),2) AS SLOPE FROM Archery ORDER BY
sim
Spiegazione: per colpire una destinazione posizionata a una determinata quota altimetrica, il giocatore punta a un angolo e scatta a una determinata distanza. Questi elementi formano un lato di un triangolo rettangolo, un angolo acuto e un ipotenusa. In questa query, si calcola la distanza di ripresa per varie combinazioni di quota altimetrica e angoli di destinazione in base alla posizione del giocatore dalla destinazione. La funzione radianti consente di convertire gli angoli in radianti e di calcolare il valore sinusoidale utilizzando la funzione sinusoidale. La quota altimetrica viene suddivisa in base al valore sinusoidale per calcolare la distanza e troncare il risultato in due posizioni decimali utilizzando la funzione di troncamento.
Output:
{"sim":1,"SLOPE ":100.0}
{"sim":2,"SLOPE ":70.71}
{"sim":3,"SLOPE ":101.09}
Esempio 3 - Utilizzare le funzioni matematiche per calcolare il valore PH per una determinata soluzione
Si consideri una concentrazione di ioni di idrogeno PHtable per diverse soluzioni.
La tabella DDL è la seguente:
CREATE TABLE PHtable (id INTEGER,
sampleName STRING,
hIons DOUBLE,
phValue DOUBLE,
PRIMARY KEY (id) )
Il campo id contiene l'identificativo del campione di soluzione, il campo sampleName contiene il nome del campione specificato, il campo hIons è la concentrazione di ioni idrogeno nei moli per litro di liquido e il campo phValue è il valore PH della soluzione. È possibile utilizzare il valore hIons per calcolare il valore phValue di una soluzione. È possibile inizializzare la colonna phValue su NULL durante l'inserimento dei dati nella tabella.
Inserire righe di esempio nella tabella:
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)
È possibile utilizzare le funzioni matematiche per calcolare il valore PH per una determinata soluzione e aggiornare la tabella utilizzando la query seguente:
UPDATE PHtable SET phValue=trunc((log10(1/hIons)),1) where id=1 RETURNING
*
Spiegazione: il valore PH indica la forza degli acidi o delle basi in una soluzione. In questa query si utilizza la funzione log10 per calcolare il valore PH di una soluzione utilizzando la formula PH=log10(1/hIons). Poiché il valore restituito della funzione è doppio, utilizzare la funzione di troncamento per troncare il risultato a una posizione decimale. Utilizzare l'istruzione UPDATE per impostare il valore PH risultante nel campo phValue per la soluzione specificata.
Output:
{"id":1,"sampleName":"sample1","hIons":0.0063095734448019,"phValue":2.2}
È inoltre possibile utilizzare le funzioni matematiche nella clausola WHERE. In questo esempio, i campioni acidi (PH < 7) vengono trovati utilizzando la seguente query:
SELECT sampleName AS ACIDIC FROM PHtable WHERE trunc((log10(1/hIons)),1) <
7.0
Output:
{"ACIDIC":"sample1"}