通过延迟合并方法

时间:2016-06-17 03:05:35

标签: postgresql

我的表A有一列col1。此列中的元素应该得到一个新的安排。第一个元素是第一个元素,最后一个元素成为第二个元素,第二个元素成为第三个元素,依此类推......

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

1 个答案:

答案 0 :(得分:0)

假设您的单值增加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;