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 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"}