Utilisation des opérations mathématiques dans les interrogations

Découvrez les fonctions mathématiques prises en charge dans Oracle NoSQL Database Cloud Service.

Les fonctions mathématiques sont utilisées pour effectuer des calculs mathématiques sur les arguments d'entrée. Ici, les arguments fournis sont des expressions qui se résolvent en nombres.

Vous pouvez appeler les fonctions mathématiques à partir des clauses SELECT/WHERE, ainsi qu'à partir d'autres instructions NoSQL Oracle où les appels de fonction sont autorisés dans la syntaxe. Par exemple, vous pouvez fournir des fonctions mathématiques en tant qu'arguments à Utilisation des fonctions d'agrégation.

Les fonctions suivantes sont prises en charge dans Oracle NoSQL Database Cloud Service :

Tableau 1 - Fonctions mathématiques

Fonction Description
abs(n) Retourne la valeur absolue de n.
acos(n) Retourne le cosinus de l'arc de n exprimé en radians.
asin(n) Retourne le sinus de l'arc de n exprimé en radians.
atan(n) Retourne la tangente inverse de n exprimée en radians.
atan2(n1,n2) Retourne la tangente inverse des arguments n1 et n2 exprimés en radians.
plafond(n) Retourne le plus petit nombre entier supérieur ou égal à n.
cos(n) Retourne le cosinus d'un angle n spécifié en radians.
lit(n) Retourne le cotangent d'un angle n spécifié en radians.
degrés(n) Convertit n de radians en degrés.
e() Retourne la valeur du numéro Euler e.
exp(n) Retourne la valeur exponentielle de l'expression n.
étage(n) Retourne le plus grand entier inférieur ou égal à n.
ln(n) Retourne la valeur logarithmique naturelle (e de base) de n.
journal(n,b) Retourne la valeur b de base logarithmique de n.
log10(n) Retourne la valeur de base logarithmique 10 de n.
pi() Retourne la valeur de pi.
puissance (n2,n1) Retourne la valeur de n2 élevée à la puissance n1.
radians(n) Convertit n de degrés en radians.
rand() Renvoie un nombre pseudo-aléatoire compris entre zéro et un.
ronde(n [,d]) Arrondit n à d chiffres après la virgule décimale.
signe(n) Retourne le signe de n.
sin(n) Retourne le sinus d'un angle n spécifié en radians.
sqrt(n) Retourne la racine carrée de n.
tan(n) Retourne la tangente d'un angle n spécifié en radians.
trunc(n [,d]) Retourne la valeur de n tronquée à d décimales.

Note :

Pour suivre les exemples des sections, vous pouvez créer les tables et charger les données, comme décrit dans la section Exemples supplémentaires.

fonction abs

La fonction abs retourne la valeur absolue de l'expression d'entrée.

Exemple 1 - fonction abs

SELECT abs(n) FROM Userstocks
Valeur de n Sortie
10 10
-10 10
1,67 1,67
-1,67 1,67

arc cosinus

La fonction acos est une fonction trigonométrique inverse. La fonction acos retourne l'arc cosinus (inverse de cosinus) de l'expression d'entrée.

Exemple 1 - fonction cosinus arc

SELECT acos(n) FROM Archery
Valeur de n Sortie
1 0
0 1,571
sqrt(3)/2 0,524
0,5 1,047
-1 3,142

fonction sinusoïdale d'arc

La fonction asin est une fonction trigonométrique inverse. La fonction asin retourne l'arc sinus (inverse de sinus) de l'expression d'entrée.

Exemple 1 - fonction sinusoïdale d'arc

SELECT asin(n) FROM Archery
Valeur de n Sortie
1 1,571
sqrt(3)/2 1,047
0,5 0,524
-1 -1,571

fonction de bronzage d'arc

La fonction atan est une fonction trigonométrique inverse. La fonction atan retourne la tangente arc (inverse de la tangente) de l'expression d'entrée.

Exemple 1 - fonction de bronzage d'arc

SELECT atan(n) FROM Archery
Valeur de n Sortie
1 0,785
sqrt(3) 1,047

arc tan2 fonction

La fonction atan2 est une fonction trigonométrique inverse. La fonction atan2 est une fonction à deux arguments arc tangent (inverse de tan), qui retourne l'arc tangent d'une coordonnée ou d'un point dans un espace bidimensionnel (n1, n2) calculé comme atan(n2/n1).

Exemple 1 - fonction arc tan2

SELECT atan2(n1,n2) FROM Archery
Valeur de n1 Valeur de n2 Sortie
1 1 0,785
1 sqrt(3) 1,047
2 0 1,571

fonction ceil

La fonction ceil retourne le plus petit nombre entier supérieur ou égal à l'expression spécifiée.

Exemple 1 - fonction du plafond

SELECT ceil(n) FROM Userstocks
Valeur de n Sortie
1,34 2
-1,34 -1
pi() 4

fonction cosinus

La fonction cos est une fonction trigonométrique. La fonction cos retourne le cosinus d'un angle spécifié en radians.

Exemple 1 - fonction cosinus

SELECT cos(n) FROM Archery
Valeur de n Sortie
0 1
radians(90) 6.1232333995736766E-17
pi() -1

fonction cotangente

La fonction cot est une fonction trigonométrique. La fonction cot retourne le cotangent d'un angle spécifié en radians.

Exemple 1 - fonction cotangente

SELECT cot(n) FROM Archery
Valeur de n Sortie
0 Infinity
radians(90) 6.1232333995736766E-17
pi()/4 1

fonction degrés

La fonction degrees convertit l'expression spécifiée de radians en degrés.

Exemple 1 - fonction degrés

SELECT degrees(n) FROM Archery
Valeur de n Sortie
pi()/2 90
0 0

Fonction d'Euler

La fonction e retourne la valeur du numéro Euler e, c'est-à-dire 2.718281828459045.

Exemple 1 - Fonction Euler

SELECT e() AS EULER FROM Archery

Sortie :

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

fonction exp

La fonction exp retourne la valeur exponentielle de l'expression indiquée, c'est-à-dire e, élevée à la puissance de l'expression spécifiée. Ici, e est la base du logarithme naturel et a la valeur 2.718281828459045.

Exemple 1 - fonction exp

SELECT exp(n) FROM PHtable
Valeur de n Sortie
0 1
2 7,389
-2 0,135

fonction plancher

La fonction floor retourne le plus grand nombre entier inférieur ou égal à l'expression spécifiée.

Exemple 1 - Fonction plancher

SELECT floor(n) FROM Userstocks
Valeur de n Sortie
1,34 1
-1,34 -2
pi() 3

Dans la fonction

La fonction ln retourne la valeur logarithmique naturelle (base e) de l'expression spécifiée.

Exemple 1 - fonction ln

SELECT ln(n) FROM PHtable
Valeur de n Sortie
1 0
10 2,303
1.0E-7 -16,118

fonction log

La fonction log retourne la valeur logarithmique avec la base spécifiée pour l'expression indiquée.

Exemple 1 - Fonction log

SELECT log(n,b) FROM PHtable
Valeur de n Valeur de b Sortie
2 2 1
81 3 4
255 5 3,443

fonction log10

La fonction log10 retourne la valeur logarithmique avec la base 10 pour l'expression spécifiée.

Exemple 1 - fonction log10

SELECT log10(n) FROM PHtable
Valeur de n Sortie
1 0
10 1
1.0E-7 -7

fonction pi

La fonction pi retourne la valeur pi, c'est-à-dire 3.141592653589793.

Exemple 1 - fonction pi

SELECT pi() AS PI FROM Archery

Sortie :

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

fonction de puissance

La fonction pow retourne la valeur de la première expression élevée à la puissance de la deuxième expression.

Exemple 1 - fonction de puissance

SELECT pow(n2,n1) FROM PHtable
Valeur de n Valeur de b Sortie
2 4 16
2 0 1
-0,5 4 0,062
0,5 -4 16

fonction radians

La fonction radians convertit l'expression spécifiée de degrés en radians.

Exemple 1 - fonction radians

SELECT radians(n) FROM Archery
Valeur de n Sortie
180 3,142
0 0

fonction aléatoire

La fonction rand retourne un nombre pseudo-aléatoire positif. La valeur résultante peut être supérieure ou égale à zéro et inférieure à un.

Exemple 1 - Fonction aléatoire

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

Sortie :

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

fonction ronde

La fonction round arrondit la valeur d'une expression d'entrée aux décimales spécifiées à droite du point décimal.

Exemple 1 - Fonction ronde

SELECT round(n,d) FROM Userstocks
Valeur de n Valeur de d Sortie
100,331 2 100,33
100,367 2 100,37
111,567 0,5 112
111,567 4 111,567
10,361 0 ou non spécifié 10
111,331 -2 100
111,331 -4 0
-100,331 2 -100,33
-111,331 -2 -100

fonction de signe

La fonction sign retourne le signe de l'expression spécifiée, c'est-à-dire zéro si l'argument est zéro, 1 si l'argument est supérieur à zéro et -1 si l'argument est inférieur à zéro.

Exemple 1 - fonction de signe

SELECT sign(n) FROM PHtable
Valeur de n Sortie
1,89 1
-1,89 -1
0 0
péché(3*pi()/2) -1

fonction sinusoïdale

La fonction sin est une fonction trigonométrique. La fonction sin retourne le sinus d'un angle spécifié en radians.

Exemple 1 - fonction sinus

SELECT sin(n) FROM Archery
Valeur de n Sortie
radians(90) 1
pi()/4 0,707
3*pi()/2 -1

fonction racine carrée

La fonction sqrt retourne la racine carrée de l'expression spécifiée.

Exemple 1 - fonction racine carrée

SELECT sqrt(n) FROM Archery
Valeur de n Sortie
16 4
12.57/pi() 2

fonction tangente

La fonction tan est une fonction trigonométrique. La fonction tan retourne la tangente d'un angle spécifié en radians.

Exemple 1 - fonction tangente

SELECT tan(n) FROM Archery
Valeur de n Sortie
0 0
radians(90) 1.633123935319537E16
pi()/4 1

tronquer la fonction

La fonction trunc tronque la valeur d'une expression d'entrée aux décimales spécifiées à droite du point décimal.

Exemple 1 - Tronquer la fonction

SELECT trunc(n,d) FROM Userstocks
Valeur de n Valeur de d Sortie
111,567 0 ou non spécifié 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

Exemples utilisant l'API QueryRequest

Vous pouvez utiliser l'API QueryRequest et appliquer des fonctions SQL pour extraire des données d'une table NoSQL similaire aux fonctions d'horodatage et aux fonctions de chaîne.

Les extraits de code suivants montrent comment utiliser les fonctions mathématiques pour interroger la table Userstocks.

Pour exécuter une interrogation, utilisez 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);
    }
}

Pour exécuter votre interrogation, utilisez la méthode 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

Pour exécuter une interrogation, utilisez la fonction 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
    }
}

Pour exécuter une interrogation, utilisez la méthode 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);

Pour exécuter une interrogation, vous pouvez appeler la méthode QueryAsync ou appeler la méthode GetQueryAsyncEnumerable et effectuer une itération sur l'énumérable asynchrone résultant.

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

Exemples supplémentaires

Apprenez à utiliser les fonctions mathématiques dans les applications.

Exemple 1 - Appliquer des fonctions mathématiques pour extraire des transactions intrajournalières à partir d'une application de trading

Considérez une table Userstocks contenant les transactions intrajournalières d'un négociant en actions dans une application de négociation.

L'énoncé LDD de la table est le suivant :

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

Le champ id contient l'ID de la société, le champ stock contient le nom de la société dans laquelle l'utilisateur a des options d'achat d'actions, le champ units contient le nombre d'actions détenues par l'utilisateur, buyRate est le prix auquel l'utilisateur a acheté les actions et sellRate est le prix auquel l'utilisateur vend ses actions.

Insérez des exemples de ligne dans la table :

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

Vous pouvez utiliser l'interrogation suivante pour appliquer des fonctions mathématiques et extraire les détails de transaction requis de la table :

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

Explication : Dans l'interrogation ci-dessus, vous extrayez le chiffre d'affaires, les profits et pertes et les frais de courtage du jour. Vous calculez les profits/pertes à l'aide des expressions arithmétiques indiquées et appliquez la fonction plafond pour obtenir le résultat en tant que valeur entière la plus proche. Vous calculez les profits et les pertes et vous appliquez la fonction d'onglets pour calculer le roulement pour chaque transaction. Vous calculez les frais de courtage en appliquant 0,5 % sur chaque chiffre d'affaires et arrondissez le résultat à deux décimales à l'aide de la fonction arrondir.

Sortie :

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

Exemple 2 - Appliquer des fonctions mathématiques pour calculer la distance de prise de vue dans une application de jeu

Prenons l'exemple d'une table Archery contenant des données pour la prise de vue cible dans une application de jeu.

L'énoncé LDD de la table est le suivant :

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

Le champ sim identifie le nombre de simulations, le champ angle inclut différents angles (en degrés) auxquels un joueur peut viser une cible, le champ elevation contient la hauteur (en mètres) à laquelle la cible est placée.

Insérez des exemples de ligne dans la table :

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

Vous pouvez appliquer des fonctions mathématiques dans l'interrogation suivante pour calculer la distance de prise de vue pour différents angles et élévations de la cible.

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

Explication : Pour atteindre une cible placée à une certaine altitude, le joueur vise un angle et tire sur une certaine distance. Ces éléments forment un côté d'un triangle rectangle, d'un angle aigu et d'une hypoténuse. Dans cette interrogation, vous calculez la distance de prise de vue pour diverses combinaisons d'élévation et d'angles de la cible en fonction de la position du joueur par rapport à la cible. Vous utilisez la fonction radians pour convertir les angles en radians et calculer la valeur sinusoïdale à l'aide de la fonction sinusoïdale. Vous divisez l'élévation par la valeur sinusoïdale pour calculer la distance et tronquer le résultat à deux décimales à l'aide de la fonction tronquer.

Sortie :

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

Exemple 3 - Utiliser les fonctions mathématiques pour calculer la valeur PH d'une solution donnée

Considérez un PHtable contenant la concentration d'ions d'hydrogène pour différentes solutions.

L'énoncé LDD de la table est le suivant :

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

Le champ id contient l'identificateur de l'échantillon de solution, le champ sampleName contient le nom de l'échantillon donné, le champ hIons est la concentration d'ions d'hydrogène en moles par litre du liquide, et le champ phValue est la valeur PH de la solution. Vous pouvez utiliser la valeur hIons pour calculer la valeur phValue d'une solution. Vous initialisez la colonne phValue à la valeur NULL lors de l'insertion de données dans la table.

Insérez des exemples de ligne dans la table :

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)

Vous pouvez utiliser les fonctions mathématiques pour calculer la valeur PH d'une solution donnée et mettre à jour la table à l'aide de l'interrogation suivante :

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

Explication : La valeur PH indique la résistance des acides ou des bases dans une solution. Dans cette interrogation, vous utilisez la fonction log10 pour calculer la valeur PH d'une solution à l'aide de la formule PH=log10(1/hIons). Comme la valeur de retour de la fonction est double, vous utilisez la fonction tronquer pour tronquer le résultat à une décimale. Vous utilisez l'énoncé UPDATE pour définir la valeur PH résultante dans le champ phValue pour la solution spécifiée.

Sortie :

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

Vous pouvez également utiliser les fonctions mathématiques dans la clause WHERE. Dans cet exemple, vous trouverez les échantillons acides (PH < 7) à l'aide de la requête suivante :

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

Sortie :

{"ACIDIC":"sample1"}