我确实有一个包含列 col1 的表 A。此列中的元素应该重新排列。第一个元素是第一个,最后一个元素成为第二个,第二个元素成为第三个等等......
col1 col1
---- -----
1 1
2 5
3 result => 2
4 4
5 3
对我来说它看起来像一个 late merge .如何在我的案例中应用后期合并?
倒序添加一列
col1 col2 ------ ----- 1 4 2 3 3 2 4 1
合并成一栏
- 删除 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;
在 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/