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

SQL:用同一表中的最小值更新最大值,sql,postgresql,Sql,Postgresql,我有一个优先级为的表。诸如此类: id priority name ------------------------------- 1 5 SomeFunnyName 2 10 SomeFunnyName1 3 20 SomeFunnyName2 4 30 SomeFunnyName3 5 40 SomeFunnyName4 优先级较高的数据处理速度更

我有一个优先级为
的表。诸如此类:

id    priority    name
-------------------------------
1     5           SomeFunnyName
2     10          SomeFunnyName1
3     20          SomeFunnyName2
4     30          SomeFunnyName3
5     40          SomeFunnyName4
优先级较高的数据处理速度更快。但现在我必须改变优先级逻辑。因此,优先级较低的数据将处理得更快


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

当您乘以-1时,它会更改优先级,这样您可以通过再次乘以-1轻松恢复

UPDATE TABLE SET PRIORITY=-1*PRIORITY

当你乘以-1时,它会改变优先级,这样你可以通过再次乘以-1轻松恢复

UPDATE TABLE SET PRIORITY=-1*PRIORITY

您可以尝试使用
MAX
MIN
获取
priority
并进行一些计算,以更改表中的
MAX
MIN
优先级

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
| id | priority |           name |
|----|----------|----------------|
|  1 |       40 |  SomeFunnyName |
|  2 |       35 | SomeFunnyName1 |
|  3 |       25 | SomeFunnyName2 |
|  4 |       15 | SomeFunnyName3 |
|  5 |        5 | SomeFunnyName4 |

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

您可以尝试使用
MAX
MIN
获取
priority
并进行一些计算,以更改表中的
MAX
MIN
优先级

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
| id | priority |           name |
|----|----------|----------------|
|  1 |       40 |  SomeFunnyName |
|  2 |       35 | SomeFunnyName1 |
|  3 |       25 | SomeFunnyName2 |
|  4 |       15 | SomeFunnyName3 |
|  5 |        5 | SomeFunnyName4 |

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

比如设置优先级=100-优先级你期望的结果是什么?这有点让人困惑。如果您想“更改优先级逻辑”,那么您的数据将保持原样,您只需更改应用该逻辑的程序、查询或任何内容。例如设置优先级=100-优先级您期望的结果是什么?这有点混乱。如果你想“更改优先级逻辑”,那么你的数据将保持原样,你只需更改程序、查询或任何应用逻辑的东西。我已经想到了:d这是最简单的方法。但是优先级不应该是负的:/Hehehe如果是设置的情况(1/优先级)*10^5将其转换为int;)我已经想到了:这是最简单的方法。但是优先级不应该是负的:/Hehehe如果是设置的情况(1/优先级)*10^5将其转换为int;)谢谢对我来说很好:)谢谢!对我来说很好:)