如何在 Original_Ids 列中获取逗号分隔值的最大值,并在一列中获取最大值,在不同列中获取剩余 ID。
|Original_Ids | Max_Id| Remaining_Ids |
|123,534,243,345| 534 | 123,234,345 |
更新 - 如果我已经有了 Max_id 并且只需要下面的等式?
Remaining_Ids = Original_Ids - Max_id
谢谢
最佳答案
由于 Postgres 中数组操作的极好可能性,这可以通过将字符串转换为数组然后从数组转换为集合来相对容易地完成。
然后可以对该集合进行常规查询。使用 max()
可以选择最大值,使用 EXCEPT ALL
可以从集合中删除最大值。
然后可以使用 array_to_string()
将集合转换为数组,然后可以将数组再次转换为定界字符串。
SELECT ids original_ids,
(SELECT max(un.id::integer)
FROM unnest(string_to_array(ids,
',')) un(id)) max_id,
array_to_string(ARRAY((SELECT un.id::integer
FROM unnest(string_to_array(ids,
',')) un(id)
EXCEPT ALL
SELECT max(un.id::integer)
FROM unnest(string_to_array(ids,
',')) un(id))),
',') remaining_ids
FROM elbat;
另一种选择是 regexp_split_to_table()
直接生成一个集合(或 regexp_split_to_array()
但我们有可能的正则表达式开销并且仍然必须将数组转换为集合)。
但是尽管如此,您应该(几乎)永远不要使用定界列表(也不是数组)。使用表格,这(几乎)总是最好的选择。
关于sql - 获取列中逗号分隔值的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011001/