標準 SQL の数学関数

数学関数の動作は次のとおりです。

  • いずれかの入力パラメータが NULL の場合、 を返します。
  • いずれかの引数が NaN の場合、 を返します。

ABS

ABS(X)

説明

絶対値を計算します。引数が整数で、出力値を同じ型で表せない場合、エラーを返します(これは、正の表記が含まれていない最大の負の入力値に対してのみ発生します)。+/-inf 引数に対しては +inf を返します。

SIGN

SIGN(X)

説明

負、ゼロ、正の引数に対してそれぞれ -1、0、+1 を返します。浮動小数点引数では正と負のゼロは区別されません。NaN 引数に対しては NaN を返します。

IS_INF

IS_INF(X)

説明

値が正または負の無限大の場合に TRUE を返します。NULL 入力に対しては NULL を返します。

IS_NAN

IS_NAN(X)

説明

値が NaN 値である場合、TRUE を返します。NULL 入力に対しては NULL を返します。

IEEE_DIVIDE

IEEE_DIVIDE(X, Y)

説明

Y で X を除算します。この関数は失敗しません。FLOAT64 を返します。除算演算子(/)とは異なり、この関数はゼロまたはオーバーフローによる除算エラーを生成しません。

特殊ケース:

  • 結果がオーバーフローした場合は、+/-inf を返します。
  • Y=0 かつ X=0 の場合、NaN を返します。
  • Y=0 かつ X!=0 の場合、+/-inf を返します。
  • X = +/-inf かつ Y = の場合、NaN を返します。

IEEE_DIVIDE の動作については、下の表で詳しく説明します。

IEEE_DIVIDE の特殊なケース

次の表は、IEEE_DIVIDE の特殊なケースを示しています。

分子データ型(X) 分母データ型(Y) 結果値
0 以外 0 +/-inf
0 0 NaN
0 NaN NaN
NaN 0 NaN
+/-inf +/-inf NaN

RAND

RAND()

説明

[0, 1) の範囲の FLOAT64 型の疑似ランダム値を生成します。0 は含まれますが、1 は含まれません。

SQRT

SQRT(X)

説明

X の平方根を計算します。X が 0 未満の場合にエラーを生成します。X が +inf の場合、+inf を返します。

POW

POW(X, Y)

説明

X を Y 乗した値を返します。結果がアンダーフローし、表現できない場合、関数は値 0 を返します。次のいずれかの条件を満たす場合、エラーを返します。

  • X が 0 未満の有限の値で、かつ Y が整数値でない場合
  • X が 0 で、かつ Y が 0 未満の有限の値の場合

POW() の動作については、下の表で詳しく説明します。

POWER

POWER(X, Y)

説明

POW() と同等です。

POW(X, Y)POWER(X, Y) の特殊ケース

POW(X, Y)POWER(X, Y) の特殊ケースは次のとおりです。

X POW(X, Y) または POWER(X, Y)
1.0 NaN を含む任意の値 1.0
NaN を含む任意の値 0 1.0
-1.0 +/-inf 1.0
ABS(X) < 1 -inf +inf
ABS(X) > 1 -inf 0
ABS(X) < 1 +inf 0
ABS(X) > 1 +inf +inf
-inf Y < 0 0
-inf Y > 0 Y が奇数の場合は -inf、それ以外は +inf
+inf Y < 0 0
+inf Y > 0 +inf

EXP

EXP(X)

説明

e の X 乗(自然指数関数)を計算します。結果がアンダーフローした場合、ゼロを返します。結果がオーバーフローする場合は、エラーを生成します。X が +/-inf の場合、この関数は +inf または 0 を返します。

LN

LN(X)

説明

X の自然対数を計算します。X が 0 以下の場合、エラーを生成します。X が +inf の場合、+inf を返します。

LOG

LOG(X [, Y])

説明

X のみが存在する場合、LOGLN と同義です。Y も存在する場合、 は Y を底とする X の対数を計算します。次の場合はエラーを生成します。

  • X がゼロ以下
  • Y が 1.0
  • Y がゼロ以下

LOG(X, Y) の動作については、下の表で詳しく説明します。

LOG(X, Y) の特殊なケース

X LOG(X, Y)
-inf 任意値 NaN
任意値 +inf NaN
+inf 0.0 Y < 1.0 -inf
+inf Y > 1.0 +inf

LOG10

LOG10(X)

説明

LOG と似ていますが、10 を底とする対数を計算します。

GREATEST

GREATEST(X1,...,XN)

説明

入力のいずれかが NULL の場合 を返します。入力のいずれかが NaN の場合 NaN を返します。それ以外では、< 比較によって X1,...,XN の間の最大値を返します。

LEAST

LEAST(X1,...,XN)

説明

入力のいずれかが NULL の場合、 を返します。入力のいずれかが NaN の場合、NaN を返します。それ以外では、> 比較によって X1,...,XN の間の最小値を返します。

DIV

DIV(X, Y)

説明

Y による X の整数除算の結果を返します。ゼロ除算はエラーを返します。-1 による除算はオーバーフローする可能性があります。可能な結果の型については、下の表をご覧ください。

SAFE_DIVIDE

SAFE_DIVIDE(X, Y)

説明

除算演算子(/)と同じですが、0 で割った場合など、エラーがあると NULL を返します。

SAFE_MULTIPLY

SAFE_MULTIPLY(X, Y)

説明

乗算演算子(*)と同じですが、オーバーフローが発生すると NULL を返します。

SAFE_NEGATE

SAFE_NEGATE(X)

説明

単項マイナス演算子(-)と同じですが、オーバーフローが発生すると NULL を返します。

SAFE_ADD

SAFE_ADD(X, Y)

説明

加算演算子(+)と同じですが、オーバーフローが発生すると NULL を返します。

SAFE_SUBTRACT

SAFE_SUBTRACT(X, Y)

説明

減算演算子(-)と同じですが、オーバーフローが発生すると NULL を返します。

MOD

MOD(X, Y)

説明

モジュロ関数: Y による X の除算の剰余を返します。返される値は X と同じ符号を持ちます。Y が 0 の場合、エラーが発生します。可能な結果の型については、下の表をご覧ください。

ROUND

ROUND(X [, N])

説明

X のみが存在する場合、ROUND は X を最も近い整数に丸めます。N が存在する場合、ROUND は小数点以下の N 小数位に X を丸めます。N が負の場合、ROUND は小数点の左側の桁を丸めます。中間の値の場合は、ゼロから遠ざかるように丸めます。オーバーフローが発生した場合は、エラーが発生します。

TRUNC

TRUNC(X [, N])

説明

X のみが存在する場合、TRUNC は絶対値が X 以下で最も近い整数に X を丸めます。N も存在する場合、 の動作は ROUND(X, N) と似ていますが、常にゼロに近づくように丸め、オーバーフローすることはありません。

CEIL

CEIL(X)

説明

X 以上で最小の整数値を(FLOAT64 型で)返します。

CEILING

CEILING(X)

説明

CEIL(X) と同義

FLOOR

FLOOR(X)

説明

X よりも大きくない最大の整数値を(FLOAT64 型で)返します。

丸め関数の動作の例

BigQuery 丸め関数の動作例:

入力「X」 ROUND(X) TRUNC(X) CEIL(X) FLOOR(X)
2.0 2.0 2.0 2.0 2.0
2.3 2.0 2.0 3.0 2.0
2.8 3.0 2.0 3.0 2.0
2.5 3.0 2.0 3.0 2.0
-2.3 -2.0 -2.0 -2.0 -3.0
-2.8 -3.0 -2.0 -2.0 -3.0
-2.5 -3.0 -2.0 -2.0 -3.0
0 0 0 0 0
+/-inf +/-inf +/-inf +/-inf +/-inf
NaN NaN NaN NaN NaN

COS

COS(X)

説明

X のコサインを計算します。X は RADIANS で指定されます。失敗することはありません。

COSH

COSH(X)

説明

X の双曲線コサインを計算します。X は RADIANS で指定されます。オーバーフローが発生した場合は、エラーが発生します。

ACOS

ACOS(X)

説明

X の逆コサインの主値を計算します。戻り値の範囲は [0,π] です。X が [-1, 1] の範囲外の値である場合、エラーになります。

ACOSH

ACOSH(X)

説明

X の逆双曲線コサインを計算します。X が 1 未満の値の場合、エラーになります。

SIN

SIN(X)

説明

X のサインを計算します。X は RADIANS で指定されます。失敗することはありません。

SINH

SINH(X)

説明

X の双曲線サインを計算します。X は RADIANS で指定されます。オーバーフローが発生した場合は、エラーが発生します。

ASIN

ASIN(X)

説明

X の逆サインの主値を計算します。戻り値の範囲は [-π/2,π/2] です。X が [-1, 1] の範囲外である場合、エラーになります。

ASINH

ASINH(X)

説明

X の逆双曲線正サインを計算します。失敗することはありません。

TAN

TAN(X)

説明

X のタンジェントを計算します。X は RADIANS で指定されます。オーバーフローが発生した場合は、エラーが発生します。

TANH

TANH(X)

説明

X の双曲線タンジェントを計算します。X は RADIANS で指定されます。失敗することはありません。

ATAN

ATAN(X)

説明

X の逆タンジェントの主値を計算します。戻り値の範囲は [-π/2,π/2] です。失敗することはありません。

ATANH

ATANH(X)

説明

X の逆双曲線タンジェントを計算します。X が [-1, 1] 未満の範囲外である場合、エラーになります。

ATAN2

ATAN2(Y, X)

説明

象限を判断するために 2 つの引数の符号を用いて、Y/X の逆タンジェントの主値を計算します。戻り値は [-π,π] の範囲内です。この関数の動作は、下の表で詳しく説明します。

ATAN2() の特殊なケース

X ATAN2(Y, X)
NaN 任意値 NaN
任意値 NaN NaN
0 0 X と Y の符号に応じて 0、π または -π
有限値 -inf Y の符号に応じて π または -π
有限値 +inf 0
+/-inf 有限値 Y の符号に応じて π/2 または π/2
+/-inf -inf Y の符号に応じて ¾π または -¾π
+/-inf +inf Y の符号に応じて π/4 または -π/4

三角関数と双曲線丸め関数の特殊なケース

X COS(X) COSH(X) ACOS(X) ACOSH(X) SIN(X) SINH(X) ASIN(X) ASINH(X) Tan(X) TANH(X) ATAN(X) ATANH(X)
+/-inf NaN =+inf NaN =+inf NaN =+inf NaN =+inf NaN =+1.0 π/2 NaN
-inf NaN =+inf NaN NaN NaN -inf NaN -inf NaN -1.0 -π/2 NaN
NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

RANGE_BUCKET

RANGE_BUCKET(point, boundaries_array)

説明

RANGE_BUCKET は、並べ替えられた配列をスキャンして、ポイントの上限の 0 ベースの位置を返します。ビルド パーティション、ヒストグラム、ビジネス定義ルールなどでデータをグループ化する必要がある場合に有用です。

RANGE_BUCKET は、次のルールに従います:

  • 配列内にポイントがある場合は、次に大きい値のインデックスを返します。

    RANGE_BUCKET(20, [0, 10, 20, 30, 40]) -- 3 is return value
    RANGE_BUCKET(20, [0, 10, 20, 20, 40, 40]) -- 4 is return value
    
  • ポイントが配列内に存在せず、2 つの値の間にある場合は、大きい方の値のインデックスを返します。

    RANGE_BUCKET(25, [0, 10, 20, 30, 40]) -- 3 is return value
    
  • ポイントが配列の最初の値より小さい場合は 0 が返されます。

    RANGE_BUCKET(-10, [5, 10, 20, 30, 40]) -- 0 is return value
    
  • ポイントが配列の最後の値以上の場合、配列の長さを返します。

    RANGE_BUCKET(80, [0, 10, 20, 30, 40]) -- 5 is return value
    
  • 配列が空の場合は 0 を返します。

    RANGE_BUCKET(80, []) -- 0 is return value
    
  • ポイントが NULL または NaN の場合、 を返します。

    RANGE_BUCKET(NULL, [0, 10, 20, 30, 40]) -- NULL is return value
    
  • ポイントと配列のデータ型は互換性がある必要があります。

    RANGE_BUCKET('a', ['a', 'b', 'c', 'd']) -- 1 is return value
    RANGE_BUCKET(1.2, [1, 1.2, 1.4, 1.6]) -- 2 is return value
    RANGE_BUCKET(1.2, [1, 2, 4, 6]) -- execution failure
    

次の場合に実行エラーが発生します。

  • 配列には、NaN 値または NULL 値が含まれています。

    RANGE_BUCKET(80, [NULL, 10, 20, 30, 40]) -- execution failure
    
  • 配列は昇順で並べ替えられていません。

    RANGE_BUCKET(30, [10, 30, 20, 40, 50]) -- execution failure
    

パラメータ

  • point: 汎用値です。
  • boundaries_array: 汎用値の汎用配列です。

戻り値

INT64

students という名前のテーブルで、各 age_group バケットに存在するレコードの数を生徒の年齢に基づいて確認します。

  • age_group 0(age < 10)
  • age_group 1(age = 10、age < 20)
  • age_group 2(age = 20、age < 30)
  • age_group 3(age >= 30)
WITH students AS
(
  SELECT 9 AS age UNION ALL
  SELECT 20 AS age UNION ALL
  SELECT 25 AS age UNION ALL
  SELECT 31 AS age UNION ALL
  SELECT 32 AS age UNION ALL
  SELECT 33 AS age
)
SELECT RANGE_BUCKET(age, [10, 20, 30]) AS age_group, COUNT(*) AS count
FROM students
GROUP BY 1

+--------------+-------+
| age_group    | count |
+--------------+-------+
| 0            | 1     |
| 2            | 2     |
| 3            | 3     |
+--------------+-------+
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。