我的数据库中有一个表中有一个VARRAY。 VARRAY大小为4788
CREATE OR REPLACE TYPE numbers AS VARRAY(4788) of NUMBER;
CREATE TABLE table1
(
id NUMBER(5) NOT NULL,
notes VARCHAR2(150),
person_id NUMBER(5),
visit_id NUMBER(5) NOT NULL,
device_id NUMBER(5),
vals numbers,
CONSTRAINT PK_table1 PRIMARY KEY (id)
);
我想知道我如何一次迭代第1列(表中有637行,每行有4788大小的VARRAY。我试图做一些统计数据以获得整个Cohens D的值数据集。 基本上我想说的是......
M_1的计算方法是取1-300行第1列的平均值。 M_2是从行301-337的第1列的平均值计算得出的。然后我们减去M_1 - M_2,然后将该值除以行1-637的第1列的所有值的标准偏差。我想对所有4788列重复此操作。
另外,欢迎提出改进建议。
非常感谢任何帮助。
答案 0 :(得分:1)
我的建议是为值创建一个单独的表。所以第一个表变为:
CREATE TABLE table1
(
id NUMBER(5) NOT NULL,
notes VARCHAR2(150),
person_id NUMBER(5),
visit_id NUMBER(5) NOT NULL,
device_id NUMBER(5),
CONSTRAINT PK_table1 PRIMARY KEY (id)
);
和第二个(子)表是:
CREATE TABLE table2
(
id NUMBER NOT NULL,
table1_id NUMBER(5) NOT NULL,
value NUMBER,
CONSTRAINT PK_table2 PRIMARY KEY (id),
CONSTRAINT FK_table2_table1 FOREIGN KEY (table1_id)
REFERENCES table1 (id)
);
对于table1中的每一行,您将向表2中插入4788行。
现在,您可以使用Oracle AVG
函数计算平均值,如:
select avg(value)
from table2
where table1_id between 1 and 300; -- or however you identify the first 300 rows