postgresql - 如何从 Postgresql 中的最大值 3 中的最后两位数中获取最大值?
问题描述
我想将一些数字修剪为两位数并从中获取最大值。
我的表列称为“千”(int4),具有以下值:
- 912
- 905
- 900
- 11
- 7
- 6
我希望收到值 12,因为在将数字修剪到最大值之后。两位数的 912 应该转换为高于 11 的 12,但我使用查询收到 7:
SELECT MAX(RIGHT("thousands"::varchar, 2))
FROM "numbers"
我猜 RIGHT([string], [number of digits from right to left]) 当值的位数少于请求时会搞砸,但我不知道如何实现所需的解决方案。有人可以帮忙吗?
解决方案
RIGHT()
返回一个text
输出。因此,MAX()
应用于此输出并使用字母顺序。按此顺序,7
在12
因为7 > 1
(1
作为 的第一个字符12
)之后。为避免这种情况,您可以在使用之前将RIGHT()
结果转换为类型:int
MAX()
SELECT
MAX(RIGHT(thousands::text, 2)::int)
FROM t
更好更快的方法是使用数字运算而不是双重转换您的值。因此,可以使用模运算计算数字的最后一位%
:
SELECT
MAX(thousands % 100)
FROM t
推荐阅读
- javascript - 在 Eclipse IDE 中使用 Ant 缩小 JavaScript 文件,错误:Missing Name After . 操作员
- angular - 有没有更好的方法让我在 Angular 中缓存 HTTP 请求?
- html - 垂直调整视口大小时,高度为 100% 的 Div 变得小于 100%
- reactjs - 如何在不改变其他卡位置的情况下交换两张卡
- javascript - 我如何获得一个元素来检测鼠标悬停
- python-3.x - 调用多进程时docker服务器挂起并给出此错误
- java - ArrayList 的烦恼
- javascript - Bootstrap v3.3.6 下拉菜单不适用于动态元素
- c++ - 在继承 C++ 中调用 main 中的参数化构造函数
- javascript - firebase onAuthStateChanged 用户不应为空