Oracle SQL开发人员创建函数以查找统计规范化
我试图创建一个函数来计算数字表的统计标准化值。我一直得到错误ORA-01476:除数等于零。救命啊Oracle SQL开发人员创建函数以查找统计规范化,oracle,plsql,ddl,stored-functions,Oracle,Plsql,Ddl,Stored Functions,我试图创建一个函数来计算数字表的统计标准化值。我一直得到错误ORA-01476:除数等于零。救命啊 CREATE FUNCTION NORMALIZATION (OriginalValues NUMBER, MaxNumber NUMBER, MinNumber NUMBER) RETURN NUMBER AS BEGIN RETURN (OriginalValues - MinNumber)/(MaxNumber - MinNumber); END NORMALIZATION; /
CREATE FUNCTION NORMALIZATION (OriginalValues NUMBER, MaxNumber NUMBER, MinNumber NUMBER)
RETURN NUMBER AS
BEGIN
RETURN (OriginalValues - MinNumber)/(MaxNumber - MinNumber);
END NORMALIZATION;
/
CREATE TABLE X (
AGE NUMBER(5) CONSTRAINT AgePK PRIMARY KEY
);
INSERT INTO X VALUES (1);
INSERT INTO X VALUES (3);
INSERT INTO X VALUES (5);
INSERT INTO X VALUES (32);
INSERT INTO X VALUES (25);
INSERT INTO X VALUES (102);
INSERT INTO X VALUES (109);
INSERT INTO X VALUES (111);
SELECT Age, NORMALIZATION(Age, MAX(Age), MIN(Age)) AS NormalizedAge
FROM X
GROUP BY Age;
你应该把它分开,看看问题在哪里。 除以0很可能是因为最小值(年龄)与最大值(年龄)相同 我认为问题在于你的选择 我不能自动取款机,但你能试着像这样运行它吗
SELECT age
, NORMALISATION(age, (SELECT MAX(age) FROM X), (SELECT MIN(age) FROM X)) as normalisedAge
FROM X
如果您使用
min
和max
值测试您的选择
SELECT Age, MAX(Age), MIN(Age)
FROM X
group by age;
你会得到
Age Min max
1 1 1
3 3 3
5 5 5
25 25 25
32 32 32
102 102 102
109 109 109
111 111 111
因此,该函数的结果并不令人惊讶
(OriginalValues - MinNumber)/(MaxNumber - MinNumber)
(1 - 1) / (1 - 1) -- for the first Row
(2 - 2) / (2 - 2) -- for the second Row
等等
您可以使用解析函数获得最小值和最大值
SELECT Age
, min(age) over () as min_val
, max(age) over () as max_val
FROM X
group by age;
结果
Age min max
1 1 111
3 1 111
5 1 111
25 1 111
32 1 111
102 1 111
109 1 111
111 1 111
你选择的是什么样子
select age,
NORMALIZATION(age,max_val,min_val)
from ( SELECT Age
, min(age) over () as min_val
, max(age) over () as max_val
FROM X
group by age
);