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;)谢谢对我来说很好:)谢谢!对我来说很好:)