SQL:使用同一表中的最小值更新最大值

时间:2018-10-25 09:29:20

标签: sql postgresql

我有一个带有priority的表。像这样:

id    priority    name
-------------------------------
1     5           SomeFunnyName
2     10          SomeFunnyName1
3     20          SomeFunnyName2
4     30          SomeFunnyName3
5     40          SomeFunnyName4

具有较高优先级的数据处理速度更快。但是现在我必须更改优先级逻辑。因此,优先级较低的数据将更快地处理。

如何更新此表以使具有最高优先级的数据现在具有最低优先级?

2 个答案:

答案 0 :(得分:2)

当您乘以减一会改变优先级,这样您可以通过再次乘以减一来轻松地还原

Security

答案 1 :(得分:1)

您可以尝试使用MAXMIN获得priority并进行一些计算,以使其更改表中的MAXMIN优先级。 / p>

CREATE TABLE T(
   id int,
   priority int,
   name varchar(50)
);


insert into t values (1,5,'SomeFunnyName');
insert into t values (2,10,'SomeFunnyName1');
insert into t values (3,20,'SomeFunnyName2');
insert into t values (4,30,'SomeFunnyName3');
insert into t values (5,40,'SomeFunnyName4');

UPDATE T 
Set priority = maxVal - priority + minVal
FROM (
  SELECT MAX(priority) maxVal,MIN(priority) minVal 
  FROM T
) t1

查询1

SELECT * FROM T

Results

| id | priority |           name |
|----|----------|----------------|
|  1 |       40 |  SomeFunnyName |
|  2 |       35 | SomeFunnyName1 |
|  3 |       25 | SomeFunnyName2 |
|  4 |       15 | SomeFunnyName3 |
|  5 |        5 | SomeFunnyName4 |