Mathematische Vorgänge in Abfragen verwenden

Lernen Sie die in Oracle NoSQL Database Cloud Service unterstützten mathematischen Funktionen kennen.

Die mathematischen Funktionen werden verwendet, um mathematische Berechnungen für die Eingabeargumente durchzuführen. Hier sind die angegebenen Argumente Ausdrücke, die in Zahlen aufgelöst werden.

Sie können die mathematischen Funktionen aus den SELECT/WHERE-Klauseln und auch aus anderen Oracle NoSQL-Anweisungen aufrufen, in denen Funktionsaufrufe in der Syntax zulässig sind. Beispiel: Sie können mathematische Funktionen als Argumente für Verwenden von Aggregatfunktionen angeben.

Die folgenden Funktionen werden in Oracle NoSQL Database Cloud Service unterstützt:

Tabelle 1 - Mathematische Funktionen

Funktion Beschreibung
abs(n) Gibt den absoluten Wert von n zurück.
acos(n) Gibt den Arkuskosinus von n in Radiant zurück.
asin(n) Gibt den Arkussinus von n in Radiant zurück.
atan(n) Gibt den Arkustangens von n in Radiant ausgedrückt zurück.
atan2(n1,n2) Gibt den Arkustangens der Argumente n1 und n2 in Radianten zurück.
Obergrenze(n) Gibt die kleinste Ganzzahl zurück, die größer oder gleich n ist.
cos(n) Gibt den Kosinus eines Winkels n zurück, der in Radianten angegeben ist.
Kinderbett(n) Gibt den Cotangent eines Winkels n zurück, der in Radiant angegeben ist.
Grad(n) Konvertiert n von den Radianten in Grad.
e() Gibt den Wert der Euler-Nummer e zurück.
exp(n) Gibt den exponentiellen Wert des Ausdrucks n zurück.
boden(n) Gibt die größte Ganzzahl zurück, die kleiner oder gleich n ist.
ln(n) Gibt den natürlichen logarithmischen Wert (Basis e) von n zurück.
log(n,b) Gibt den logarithmischen Basiswert b von n zurück.
log10(n) Gibt den logarithmischen Basiswert 10 von n zurück.
pi() Gibt den Wert pi zurück.
Leistung(n2,n1) Gibt den Wert n2 zurück, der an die Stromversorgung n1 angehoben wurde.
Radianten(n) Konvertiert n von Grad in Radiant.
rand() Gibt eine Pseudozufallszahl zwischen Null und Eins zurück.
rund(n [,d]) Rundet n auf d Stellen rechts neben dem Dezimalzeichen.
Vorzeichen(n) Gibt das Vorzeichen n zurück.
sin(n) Gibt den Sinus eines Winkels n zurück, der in Radiant angegeben ist.
Wurzel(n) Gibt die Quadratwurzel von n zurück.
tan(n) Gibt den Tangenswert eines Winkels n zurück, der in Radianten angegeben ist.
trunc(n [,d]) Gibt den Wert n zurück, der auf d Dezimalstellen abgeschnitten wurde.

Hinweis:

Um die Beispiele in den Abschnitten zu befolgen, können Sie die Tabellen erstellen und Daten laden, wie im Abschnitt Zusätzliche Beispiele beschrieben.

abs (Funktion)

Die Funktion abs gibt den absoluten Wert des Eingabeausdrucks zurück.

Beispiel 1 - abs-Funktion

SELECT abs(n) FROM Userstocks
Wert von n Ausgabe
10 10
-10 10
1,67 1,67
-1,67 1,67

Ark-Kosinusfunktion

Die Funktion acos ist eine umgekehrte trigonometrische Funktion. Die Funktion acos gibt den Arkuskosinus (umgekehrt zum Kosinus) des Eingabeausdrucks zurück.

Beispiel 1 - Arc-Cosine-Funktion

SELECT acos(n) FROM Archery
Wert von n Ausgabe
1 0
0 1,571
Quadratwurzel(3)/2 0,524
0,5 1,047
-1 3,142

Sinusfunktion

Die Funktion asin ist eine umgekehrte trigonometrische Funktion. Die Funktion asin gibt den Arkussinus (inverse of sine) des Eingabeausdrucks zurück.

Beispiel 1 - Sinusfunktion

SELECT asin(n) FROM Archery
Wert von n Ausgabe
1 1,571
Quadratwurzel(3)/2 1,047
0,5 0,524
-1 -1,571

Arc-Tan-Funktion

Die Funktion atan ist eine umgekehrte trigonometrische Funktion. Die Funktion atan gibt den Bogen-Tangens (inverse of tangent) des Eingabeausdrucks zurück.

Beispiel 1 - Bräunungsfunktion

SELECT atan(n) FROM Archery
Wert von n Ausgabe
1 0,785
Quadratwurzel(3) 1,047

Arc tan2-Funktion

Die Funktion atan2 ist eine umgekehrte trigonometrische Funktion. Die Funktion atan2 ist eine Zwei-Argument-Bogen-Tangensfunktion (inverse of tan), die den Bogen-Tangens einer Koordinate oder eines Punktes im zweidimensionalen Raum (n1, n2) zurückgibt, der als atan(n2/n1) berechnet wird.

Beispiel 1 - Funktion arc tan2

SELECT atan2(n1,n2) FROM Archery
Wert von n1 Wert von n2 Ausgabe
1 1 0,785
1 Quadratwurzel(3) 1,047
2 0 1,571

Ceil-Funktion

Die Funktion ceil gibt die kleinste Ganzzahl zurück, die größer oder gleich dem angegebenen Ausdruck ist.

Beispiel 1 - ceil-Funktion

SELECT ceil(n) FROM Userstocks
Wert von n Ausgabe
1,34 2
-1,34 -1
pi() 4

Kosinusfunktion

Die Funktion cos ist eine trigonometrische Funktion. Die Funktion cos gibt den Kosinus eines Winkels zurück, der in Radiant angegeben ist.

Beispiel 1 - Kosinusfunktion

SELECT cos(n) FROM Archery
Wert von n Ausgabe
0 1
Radiant(90) 6.123233995736766E-17
pi() -1

Cotangent-Funktion

Die Funktion cot ist eine trigonometrische Funktion. Die Funktion cot gibt den Cotangent eines Winkels zurück, der in Radiant angegeben ist.

Beispiel 1 - cotangent-Funktion

SELECT cot(n) FROM Archery
Wert von n Ausgabe
0 Unendlichkeit
Radiant(90) 6.123233995736766E-17
pi()/4 1

Gradfunktion

Die Funktion degrees konvertiert den angegebenen Ausdruck von den Radianten in Grad.

Beispiel 1 - Grad-Funktion

SELECT degrees(n) FROM Archery
Wert von n Ausgabe
pi()/2 90
0 0

Euler-Funktion

Die Funktion e gibt den Wert der Euler-Nummer e zurück, d.h. 2.718281828459045.

Beispiel 1 - Euler-Funktion

SELECT e() AS EULER FROM Archery

Ausgabe:

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

Exp-Funktion

Die Funktion exp gibt den exponentiellen Wert des angegebenen Ausdrucks zurück, d.h. e, der an die Potenz des angegebenen Ausdrucks angehoben wurde. Hier ist e die Basis des natürlichen Logarithmus und hat den Wert 2.718281828459045.

Beispiel 1 - exp-Funktion

SELECT exp(n) FROM PHtable
Wert von n Ausgabe
0 1
2 7,389
-2 0,135

Bodenfunktion

Die Funktion floor gibt die größte Ganzzahl kleiner als oder gleich dem angegebenen Ausdruck zurück.

Beispiel 1 - Bodenfunktion

SELECT floor(n) FROM Userstocks
Wert von n Ausgabe
1,34 1
-1,34 -2
pi() 3

LN-Funktion

Die Funktion ln gibt den natürlichen logarithmischen Wert (Basis e) des angegebenen Ausdrucks zurück.

Beispiel 1 - LN-Funktion

SELECT ln(n) FROM PHtable
Wert von n Ausgabe
1 0
10 2,303
1.0E-7 -16,118

Logfunktion

Die Funktion log gibt den logarithmischen Wert mit der angegebenen Basis für den angegebenen Ausdruck zurück.

Beispiel 1 - Protokollfunktion

SELECT log(n,b) FROM PHtable
Wert von n Wert von b Ausgabe
2 2 1
81 3 4
255 5 3,443

log10-Funktion

Die Funktion log10 gibt den logarithmischen Wert mit Basis 10 für den angegebenen Ausdruck zurück.

Beispiel 1 - log10-Funktion

SELECT log10(n) FROM PHtable
Wert von n Ausgabe
1 0
10 1
1.0E-7 -7

Pi-Funktion

Die Funktion pi gibt den Wert von "pi" zurück, das heißt 3.141592653589793.

Beispiel 1 - pi-Funktion

SELECT pi() AS PI FROM Archery

Ausgabe:

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

Leistungsfunktion

Die Funktion pow gibt den Wert des ersten Ausdrucks zurück, der an die Macht des zweiten Ausdrucks angehoben wurde.

Beispiel 1 - Leistungsfunktion

SELECT pow(n2,n1) FROM PHtable
Wert von n Wert von b Ausgabe
2 4 16
2 0 1
-0,5 4 0,062
0,5 -4 16

Radians-Funktion

Die Funktion radians konvertiert den angegebenen Ausdruck von Grad in Radianten.

Beispiel 1 - Radienfunktion

SELECT radians(n) FROM Archery
Wert von n Ausgabe
180 3,142
0 0

Zufallsfunktion

Die Funktion rand gibt eine positive Pseudozufallszahl zurück. Der resultierende Wert kann größer als oder gleich null und kleiner als eins sein.

Beispiel 1 - Zufallsfunktion

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

Ausgabe:

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

Rundungsfunktion

Die Funktion round rundet den Wert eines Eingabeausdrucks auf die angegebenen Dezimalstellen rechts neben dem Dezimalzeichen.

Beispiel 1 - runde Funktion

SELECT round(n,d) FROM Userstocks
Wert von n Wert von d Ausgabe
100,331 2 100,33
100,367 2 100,37
111,567 0,5 112
111,567 4 111,567
10,361 0 oder nicht angegeben 10
111,331 -2 100
111,331 -4 0
-100,331 2 -100,33
-111,331 -2 -100

Zeichenfunktion

Die Funktion sign gibt das Vorzeichen des angegebenen Ausdrucks zurück, d.h. Null, wenn das Argument Null ist, 1, wenn das Argument größer als Null ist, und -1, wenn das Argument kleiner als Null ist.

Beispiel 1 - Zeichenfunktion

SELECT sign(n) FROM PHtable
Wert von n Ausgabe
1,89 1
-1,89 -1
0 0
sin(3*pi()/2) -1

Sinusfunktion

Die Funktion sin ist eine trigonometrische Funktion. Die Funktion sin gibt den Sinus eines Winkels zurück, der in Radiant angegeben ist.

Beispiel 1 - Sinusfunktion

SELECT sin(n) FROM Archery
Wert von n Ausgabe
Radiant(90) 1
pi()/4 0,707
3*pi()/2 -1

Quadratwurzelfunktion

Die Funktion sqrt gibt die Quadratwurzel des angegebenen Ausdrucks zurück.

Beispiel 1 - Quadratwurzelfunktion

SELECT sqrt(n) FROM Archery
Wert von n Ausgabe
16 4
12.57/pi() 2

Tangensfunktion

Die Funktion tan ist eine trigonometrische Funktion. Die Funktion tan gibt den Tangens eines Winkels zurück, der in Radianten angegeben ist.

Beispiel 1 - Tangensfunktion

SELECT tan(n) FROM Archery
Wert von n Ausgabe
0 0
Radiant(90) 1.633123935319537E16
pi()/4 1

Truncate-Funktion

Die Funktion trunc schneidet den Wert eines Eingabeausdrucks auf die angegebenen Dezimalstellen rechts neben dem Dezimalzeichen ab.

Beispiel 1 - Funktion abschneiden

SELECT trunc(n,d) FROM Userstocks
Wert von n Wert von d Ausgabe
111,567 0 oder nicht angegeben 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

Beispiele für die Verwendung der QueryRequest-API

Sie können die API QueryRequest verwenden und SQL-Funktionen anwenden, um Daten aus einer NoSQL-Tabelle abzurufen, die Timestamp-Funktionen und String-Funktionen ähnelt.

Die folgenden Code-Snippets zeigen, wie mathematische Funktionen zum Abfragen der Tabelle Userstocks verwendet werden.

Zum Ausführen der Abfrage verwenden Sie die NoSQLHandle.query()-API.

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);
    }
}

Um die Abfrage auszuführen, verwenden Sie die Methode 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

Um eine Abfrage auszuführen, verwenden Sie die Funktion 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
    }
}

Um eine Abfrage auszuführen, verwenden Sie die Methode 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);

Um eine Abfrage auszuführen, können Sie die Methode QueryAsync aufrufen oder die Methode GetQueryAsyncEnumerable aufrufen und über die resultierende asynchrone aufzählbare Methode iterieren.

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());
    }
}

Weitere Beispiele

Lernen Sie, mathematische Funktionen in Anwendungen zu verwenden.

Beispiel 1 - Mathematische Funktionen zum Abrufen von Intraday-Transaktionen aus einer Handelsanwendung anwenden

Betrachten Sie eine Tabelle Userstocks, die Intraday-Transaktionen eines Aktienhändlers in einer Handelsanwendung enthält.

Die Tabellen-DDL lautet wie folgt:

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

Das Feld id enthält die ID des Unternehmens, das Feld stock enthält den Firmennamen, in dem der Benutzer Aktienoptionen hat, das Feld units enthält die Anzahl der Aktien, die dem Benutzer gehören, buyRate ist der Preis, zu dem der Benutzer die Aktien gekauft hat, und sellRate ist der Preis, zu dem der Benutzer seine Aktien verkauft.

Beispielzeilen in die Tabelle einfügen:

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

Mit der folgenden Abfrage können Sie mathematische Funktionen anwenden und die erforderlichen Transaktionsdetails aus der Tabelle abrufen:

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

Erläuterung: In der obigen Abfrage rufen Sie die Umsatz-, Gewinn-/Verlust- und Maklergebühren des Tages ab. Sie berechnen den Gewinn/Verlust mit den angegebenen arithmetischen Ausdrücken und wenden die ceil-Funktion an, um das Ergebnis als nächsten Ganzzahlwert abzurufen. Sie berechnen den Gewinn/Verlust und wenden die Registerkartenfunktion an, um den Umsatz für jede Transaktion zu berechnen. Sie berechnen die Maklergebühren, indem Sie 0,5% auf jeden Umsatz anwenden und das Ergebnis mit der Rundungsfunktion auf zwei Dezimalstellen runden.

Ausgabe:

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

Beispiel 2 - Anwendung mathematischer Funktionen zur Berechnung des Schießabstands in einer Spieleanwendung

Betrachten Sie eine Archery-Tabelle mit Daten für die Zielaufnahme in einer Spieleanwendung.

Die Tabellen-DDL lautet wie folgt:

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

Das Sim-Feld identifiziert die Simulationsanzahl. Das Feld angle enthält verschiedene Winkel (in Grad), in denen ein Spieler auf ein Ziel zielen kann. Das Feld elevation enthält die Höhe (in Metern), in der das Ziel platziert wird.

Beispielzeilen in die Tabelle einfügen:

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

Sie können mathematische Funktionen in der folgenden Abfrage anwenden, um den Aufnahmeabstand für verschiedene Winkel und Höhen des Ziels zu berechnen.

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

Erläuterung: Um ein Ziel zu treffen, das auf einer bestimmten Höhe platziert ist, zielt der Spieler auf einen Winkel und schießt eine bestimmte Entfernung. Diese Elemente bilden eine Seite eines rechtwinkligen Dreiecks, einen spitzen Winkel und eine Hypotenuse. In dieser Abfrage berechnen Sie den Aufnahmeabstand für verschiedene Kombinationen von Zielhöhe und -winkeln basierend auf der Position des Spielers vom Ziel. Mit der Radians-Funktion konvertieren Sie die Winkel in Radiant und berechnen den Sinuswert mit der sine-Funktion. Sie teilen die Höhe durch den Sinuswert, um den Abstand zu berechnen und das Ergebnis mit der Funktion "truncate" auf zwei Dezimalstellen zu kürzen.

Ausgabe:

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

Beispiel 3 - Verwenden Sie die mathematischen Funktionen, um den PH-Wert für eine bestimmte Lösung zu berechnen

Betrachten Sie eine PHtable, die Wasserstoffionenkonzentration für verschiedene Lösungen enthält.

Die Tabellen-DDL lautet wie folgt:

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

Das Feld id enthält die ID der Lösungsprobe, das Feld sampleName enthält den Namen der angegebenen Probe, das Feld hIons ist die Wasserstoffionenkonzentration in Mol pro Liter der Flüssigkeit und das Feld phValue ist der PH-Wert der Lösung. Sie können den Wert hIons verwenden, um die phValue einer Lösung zu berechnen. Sie initialisieren die Spalte phValue auf NULL, während Sie Daten in die Tabelle einfügen.

Beispielzeilen in die Tabelle einfügen:

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)

Mit den mathematischen Funktionen können Sie den PH-Wert für eine bestimmte Lösung berechnen und die Tabelle mit der folgenden Abfrage aktualisieren:

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

Erläuterung: Der PH-Wert gibt die Stärke von Säuren oder Basen in einer Lösung an. In dieser Abfrage verwenden Sie die Funktion log10, um den PH-Wert einer Lösung mit der Formel PH=log10(1/hIons) zu berechnen. Da der Rückgabewert der Funktion doppelt ist, verwenden Sie die Truncate-Funktion, um das Ergebnis auf eine Dezimalstelle zu kürzen. Mit der UPDATE-Anweisung legen Sie den resultierenden PH-Wert im Feld phValue für die angegebene Lösung fest.

Ausgabe:

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

Sie können auch die mathematischen Funktionen in der WHERE-Klausel verwenden. In diesem Beispiel finden Sie die sauren Proben (PH < 7) mit der folgenden Abfrage:

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

Ausgabe:

{"ACIDIC":"sample1"}