SQL Developer 创建函数以查找统计规范化
Posted
技术标签:
【中文标题】SQL Developer 创建函数以查找统计规范化【英文标题】:SQL Developer Create Function to find statistical normalization 【发布时间】:2019-04-30 13:22:11 【问题描述】:我正在尝试创建一个计算数字表的统计标准化值的函数。我不断收到错误 ORA-01476:除数等于零。救命!!!
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;
【问题讨论】:
【参考方案1】:如果您使用 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
);
【讨论】:
【参考方案2】:你应该把它分开,看看问题出在哪里。 除以 0 很可能是因为 Min(age) 与 max(age) 相同
我认为问题出在您的 SELECT 中
我无法对 atm 进行故障排除,但你可以尝试像这样运行它吗:
SELECT age
, NORMALISATION(age, (SELECT MAX(age) FROM X), (SELECT MIN(age) FROM X)) as normalisedAge
FROM X
【讨论】:
以上是关于SQL Developer 创建函数以查找统计规范化的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL Developer:如何使用 PIVOT 函数将行转置为列
如何在sql developer中执行同时具有out参数和返回值的函数以获取结果