その他の例

アプリケーションでの数学関数の使用について学習します。

例12-24 1日の取引を取引アプリケーションから取得するための数学関数の適用

取引アプリケーションでの株式トレーダーの1日の取引を含むUserstocks表について考えてみます。

表のDDLは次のとおりです。
CREATE TABLE Userstocks (id INTEGER,
                     stock STRING,
                     units INTEGER,
                     buyRate DOUBLE,
                     sellRate DOUBLE,
PRIMARY KEY (id))

idフィールドには会社のIDが含まれ、stockフィールドにはユーザーがストック・オプションを持つ会社名が含まれ、unitsフィールドにはユーザーが所有する株式数が含まれ、buyRateはユーザーが株式を購入した価格であり、sellRateはユーザーが株式を売却した価格です。

表にサンプル行を挿入します:
INSERT into Userstocks VALUES (1, "company1", 100, 10.2, 11.5)
INSERT into Userstocks VALUES (2, "company2", 20, 15, 14.7)
次の問合せを使用して、数学関数を適用し、必要な取引の詳細を表から取得できます:
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

説明: 上の問合せでは、その日の出来高、損益および仲介手数料をフェッチします。損益は、指定された算術式を使用して計算し、ceil関数を適用して、結果を最も近い整数値として取得します。損益を計算し、abs関数を適用して各取引の出来高を計算します。各出来高に0.5%を適用して仲介手数料を計算し、round関数を使用して結果を小数点以下2桁に丸めます。

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

例12-25 ゲーム・アプリケーションで射撃距離を計算するための数学関数の適用

ゲーム・アプリケーションでの標的射撃のデータを含むArchery表について考えてみます。

表のDDLは次のとおりです。
CREATE TABLE Archery (sim INTEGER,
                     angle DOUBLE,
                     elevation DOUBLE,
PRIMARY KEY (sim) )

simフィールドはシミュレーション数を示し、angleフィールドにはゲーマーが標的を狙うことができる様々な角度(度単位)が含まれ、elevationフィールドには標的が配置される高さ(メートル単位)が含まれます。

表にサンプル行を挿入します:
INSERT INTO Archery VALUES (1, 30, 50)
INSERT INTO Archery VALUES (2, 45, 50)
INSERT INTO Archery VALUES (3, 70, 95)
次の問合せで数学関数を適用して、標的の様々な角度と高さについて射撃距離を計算できます。
SELECT sim, trunc(elevation/sin(radians(angle)),2) AS SLOPE FROM Archery ORDER BY
    sim

説明: 特定の高さに配置された標的に当てるために、ゲーマーは一定の角度で狙いを定め、一定の距離で撃ちます。これらの要素は、直角三角形の一辺、鋭角および斜辺を形成します。この問合せでは、標的からのゲーマーの位置に基づいて、標的の高さと角度の様々な組合せについて射撃距離を計算します。radians関数を使用して、角度をラジアンに変換し、sine関数を使用してサイン値を計算します。高さをサイン値で除算して距離を計算し、truncate関数を使用して結果を小数点以下2桁に切り捨てます。

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

例12-26 特定の溶液のPH値を計算するための数学関数の使用

様々な溶液の水素イオン濃度を含むPHtableについて考えてみます。

表のDDLは次のとおりです。
CREATE TABLE PHtable (id INTEGER,
                    sampleName STRING,
                    hIons DOUBLE,
                    phValue DOUBLE,
PRIMARY KEY (id) )

idフィールドには溶液サンプルの識別子が含まれ、sampleNameフィールドには特定のサンプルの名前が含まれ、hIonsフィールドは液体のリットル当たりのモル数の水素イオン濃度、phValueフィールドは溶液のPH値です。hIons値を使用して、溶液のphValueを計算できます。表へのデータの挿入中に、phValue列をNULLに初期化します。

表にサンプル行を挿入します:
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)
数学関数を使用すると、特定の溶液のPH値を計算し、次の問合せを使用して表を更新できます:
UPDATE PHtable SET phValue=trunc((log10(1/hIons)),1) where id=1 RETURNING
    *

説明: PH値は、溶液内の酸または塩基の強度を示します。この問合せでは、log10関数を使用して、式PH=log10(1/hIons)を使用して溶液のPH値を計算します。関数の戻り値はdoubleであるため、truncate関数を使用して結果を小数点以下1桁に切り捨てます。UPDATE文を使用して、指定した溶液のphValueフィールドに結果のPH値を設定します。

出力:
{"id":1,"sampleName":"sample1","hIons":0.0063095734448019,"phValue":2.2}
WHERE句で数学関数を使用することもできます。この例では、次の問合せを使用して酸性サンプル(PH < 7)を見つけます:
SELECT sampleName AS ACIDIC FROM PHtable WHERE trunc((log10(1/hIons)),1) <
    7.0
出力:
{"ACIDIC":"sample1"}