【发布时间】:2012-07-19 15:10:30
【问题描述】:
这是此处发布的更复杂问题的简化问题:
Recursive SQL statement (PostgreSQL 9.1.4)
简化问题
假设您将上三角矩阵存储在 3 列(RowIndex、ColumnIndex、MatrixValue)中:
ColumnIndex
1 2 3 4 5
1 2 2 3 3 4
2 4 4 5 6 X
3 3 2 2 X X
4 2 1 X X X
5 1 X X X X
X 值将使用以下算法计算:
M[i,j] = (M[i-1,j]+M[i,j-1])/2
(i= rows, j = columns, M=matrix)
Example:
M[3,4] = (M[2,4]+M[3,3])/2
M[3,5] = (m[2,5]+M[3,4])/2
所需的完整结果是:
ColumnIndex
1 2 3 4 5
1 2 2 3 3 4
2 4 4 5 6 5
3 3 2 2 4 4.5
4 2 1 1.5 2.75 3.625
5 1 1 1.25 2.00 2.8125
样本数据:
create table matrix_data (
RowIndex integer,
ColumnIndex integer,
MatrixValue numeric);
insert into matrix_data values (1,1,2);
insert into matrix_data values (1,2,2);
insert into matrix_data values (1,3,3);
insert into matrix_data values (1,4,3);
insert into matrix_data values (1,5,4);
insert into matrix_data values (2,1,4);
insert into matrix_data values (2,2,4);
insert into matrix_data values (2,3,5);
insert into matrix_data values (2,4,6);
insert into matrix_data values (3,1,3);
insert into matrix_data values (3,2,2);
insert into matrix_data values (3,3,2);
insert into matrix_data values (4,1,2);
insert into matrix_data values (4,2,1);
insert into matrix_data values (5,1,1);
这个可以吗?
【问题讨论】:
-
是的。 (这只是一个评论,所以我可以稍后找到这个问题)
-
看起来您的预期输出中有错误:M[4,4] 为 2.75 (4.5 + 1)/2 = 5.5 = 2.75。只是想在发布之前确认我的解决方案是正确的。
-
@podiluska:您可以出于同样的目的使用“收藏”功能,而不会让全世界知道。
标签: sql postgresql common-table-expression recursive-query