1

野球の 1 シーズン分のチームの勝率を出力する関数を SQL で記述しようとしています。

CREATE FUNCTION
calc_winning_percentage(IN w integer, IN l integer, OUT p numeric)
RETURNS numeric AS $$
    SELECT $1 ::numeric/$1 + $2 AS p;
$$ LANGUAGE SQL;

これが現在の機能です。それは非常に単純でなければなりません。W = 勝ち。L = 損失。P = パーセンテージ。勝ち (w) を取り、それを勝ち + 負け (w + l) で割ります。理論的には、これで勝率が決まります。

すでに提供されているデータをいくつか取り出して、プラグインしてみました。近いですが、正しくありません。96 勝 63 敗のチームがあるとします。この 2 つの数値を合計すると、159 になります。96/159 = ~.604 です。ただし、これらの数値をクエリで実行すると、64.0000 になります。

私は他の言語で関数を書くのはそれほど得意ではありません (約束します)。

4

1 に答える 1

2

演算子優先

CREATE OR REPLACE FUNCTION calc_winning_percentage(
     w integer
    ,l integer
    ,OUT p numeric)
  RETURNS numeric AS
$func$
    SELECT $1::numeric / ($1 + $2)
$func$ LANGUAGE SQL;

を括弧で囲む必要があります($1 + $2)

ラウンド

関数に組み込むことができます。

CREATE OR REPLACE FUNCTION calc_winning_percentage_rd3(
  w integer, 
  l integer,
  OUT p numeric)
RETURNS numeric AS
$func$
SELECT round($1::numeric/($1 + $2), 3)
$func$ LANGUAGE SQL;

またはround()、次のように上記の関数に適用できます。

SELECT round(calc_winning_percentage(1000, 29), 3);

-> SQLfiddle デモ

round()2 つのパラメーターを使用numericすると、最初の入力として必要になることに注意してください。

于 2013-03-17T21:23:32.523 に答える