sql - 获取列中逗号分隔值的最大值

标签 sql postgresql

如何在 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/

相关文章:

postgresql - Postgresql 中分组 LIMIT 10

postgresql - Postgres 8.4 和 9.4 中的不同查询计划

mysql - 如何执行多列透视

SQL Server - 根据其他列设置列值

performance - 如何基于PostgreSQL表组织工作池?

postgresql - 如何让我办公室的其他人访问我的数据库?

postgresql - 基本 json_to_recordset 查询获取 'set-valued function called in context that cannot accept a set'

mysql - 从多个表中查找数据

mysql - 在 MATCH() AGAINST() 中查找匹配列的名称或别名

php - SQL 数据库或文件系统中的照片 (2012)