首页 > 解决方案 > 在同一列中查找多个元素的最大值

问题描述

表 A 给出了 Ai、Aj 和 A.val。A 制作一个 3x3 矩阵。

我需要从 A.val 中找到 Max(A.val) 的 ij, i+1j, ij+1,i-1j, ij-1(如果存在)。但是,我找不到任何解决方案来查找同一列的特定元素的最大值。请帮忙。

样本:

i   |   j   |   val
0       0       7
0       1       5
0       2       8
1       0       10
1       1       7
1       2       7
2       0       2
2       1       0
2       2       5

答案输出:

我 | j | 值

0       0       10
0       1       8
0       2       8
1       0       10
1       1       10
1       2       8
2       0       10
2       1       7
2       2       7

标签: sqlsqlite

解决方案


我能想到的唯一合理的解释是你想要四个相邻单元格中的最大值加上当前单元格。让我假设您的数据库支持greatest(),因为这简化了问题:

select t.*,
       greatest(val,
                lag(val, 1, val) over (order by i),
                lead(val, 1, val) over (order by i),
                lag(val, 1, val) over (order by j),
                lead(val, 1, val) over (order by j)
               ) as neighborly_maximum                
from t;

您也可以使用左连接执行此操作:

select t.*,
           greatest(val,
                    coalesce(tup.val, val),
                    coalesce(tdown.val, val),
                    coalesce(tleft.val, val),
                    coalesce(tright.val, val)
                   ) as neighborly_maximum                       
from t left join
     t tup
     on tup.i = t.i and tup.j = t.j + 1 left join
     t tdown
     on tdown.i = t.i and tdown.j = t.j - 1 left join
     t tleft
     on tleft.i = t.i - 1 and tleft.j = t.j left join
     t tright
     on tright.i = t.i + 1 and tright.j = t.j;

推荐阅读