我正在尝试在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负的球队。如果你拿这两个数字并加起来,你会得到159. 96/159 =〜.604。但是,当我用查询运行这些数字时,我得到64.0000。
我在编写其他语言的函数时并不是很糟糕(我承诺),所以我在这里做错了什么?
答案 0 :(得分: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);
请注意,round()
with two parameters需要numeric
作为第一个输入。