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】:

如果您使用 minmax 值测试您的选择

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参数和返回值的函数以获取结果

PL/SQL Developer动态执行表不可访问,本会话的自动统计被禁止

PL/SQL Developer使用

无法启动 SQL Developer 4.0.1

在ubuntu下如何使用oracle sql developer创建数据库 着急谢谢了!!!