postgresql - 通过后期合并方法对列进行排序

标签 postgresql

我确实有一个包含列 col1 的表 A。此列中的元素应该重新排列。第一个元素是第一个,最后一个元素成为第二个,第二个元素成为第三个等等......

col1                                   col1
----                                   -----
 1                                       1
 2                                       5
 3           result =>                   2
 4                                       4
 5                                       3

对我来说它看起来像一个 late merge .如何在我的案例中应用后期合并?

  1. 倒序添加一列

      col1   col2
      ------  -----
       1        4
       2        3
       3        2
       4        1
    
  2. 合并成一栏

  3. 删除 row_number() > last_index/2 的所有记录

最佳答案

假设您有单调递增的 col1 值,就像您的示例中那样。在常规查询中,它会像这样工作:

SELECT col1,
       CASE WHEN col1 <= (max + 1) / 2 THEN col1 * 2 - 1 
                                       ELSE (max - col1 + 1) * 2
       END AS col2
FROM t,
     (SELECT max(col1) max FROM t) m;

SQLFiddle

UPDATE 语句中,您可以这样做:

UPDATE t
SET col1 = CASE WHEN col1 <= (max + 1) / 2 THEN col1 * 2 - 1 
                                           ELSE (max - col1 + 1) * 2
           END
FROM (SELECT max(col1) max FROM t) m;

关于postgresql - 通过后期合并方法对列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37872456/

相关文章:

java - 检查 org.jooq.exception.DataAccessException 是否序列化失败

java - Redshift 和 Postgres JDBC 驱动程序都拦截 jdbc ://postgresql connection string

sql - postgresql 表约束不拒绝错误的插入

Windows 上的 PostgreSQL 12.0 Git Bash 与 createDB 发生冲突

sql - 从同一列 X 中提取多个值,给定它们在 Y 列中的共享值

mysql - 将一个奇怪的 Mysql 查询更改为使用 group_concat 的 Postgresql

postgresql - 在 plpgsql 中以编程方式访问记录的列

c# - npgsql中的日期类型是什么?

postgresql - Postgres 中的 "SHARE ROW EXCLUSIVE"模式锁定

sql - 使用表作为输入来查询子字符串