sql - 在同一列中查找多个元素的最大值
问题描述
表 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
解决方案
我能想到的唯一合理的解释是你想要四个相邻单元格中的最大值加上当前单元格。让我假设您的数据库支持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;
推荐阅读
- javascript - 如何使用javascript用超链接替换文本?
- c - 为什么 puts 函数会打印从文件中读取的最后一行并再一次存储在数组中?
- android - 已签名的 APK 网络问题 - 未签名的 apk 能够读取 API,但已签名的 apk 继续加载
- python - CSV 文件 - 如何通过用户输入替换一行数据?
- python - 我似乎找不到将滚动条添加到我的 tkinter 元素周期表的方法
- python - 机器人阅读其他用户增加了反应
- ruby-on-rails - 活动管理员表单中的 has_one 关系
- javascript - 从存储中按降序显示图像(或者我是否需要使用 Firestore)?
- c# - C# 中的正则表达式无法正常工作以进行数字检查
- javascript - 测验应用程序上的 HTML/Javascript 速度慢/崩溃