update
t
set
sample = abs(sample)
where
sample = (select max(t.sample) from t where t.sample < 0)
但是,如果您只需要检索负片上的最大值的绝对值,那么就可以使用下面的查询。我真的认为那条 where 没有可怕的东西,你可以用它。
select abs(max(t.sample)) from t where t.sample < 0
更新 如果您只能使用select语句,那么下面的决定可以帮助您。
with
t as
(
select 1281 as sample from dual union all
select -469 as sample from dual union all
select -469 as sample from dual union all
select -509 as sample from dual union all
select -1359 as sample from dual union all
select -1359 as sample from dual union all
select -2759 as sample from dual union all
select -2829 as sample from dual
)
select
case
when t.sample = (select max(t.sample) from t where t.sample < 0) then
abs(t.sample)
else
t.sample
end sample
from
t
3条答案
按热度按时间fwzugrvs1#
CASE
与…没有区别WHERE
,它将根据数据中的每一行进行检查(除非此列上有索引)。所以我能想到的最好的办法就是编辑:只要读到你实际上需要一个“最大负片数”,如果你知道这个值是多少,你可以手动使用
CASE
```SELECT CASE WHEN Sample = -469 THEN ABS(Sample) ELSE Sample END AS Sample
FROM t
WITH MaxNeg AS (SELECT MAX(Sample) as v FROM t WHERE Sample < 0)
SELECT CASE WHEN Sample = MaxNeg.v THEN ABS(Sample) ELSE Sample END AS Sample
FROM t
wxclj1h52#
如果要更改行中的值。您可以使用以下查询。
但是,如果您只需要检索负片上的最大值的绝对值,那么就可以使用下面的查询。我真的认为那条
where
没有可怕的东西,你可以用它。更新
如果您只能使用select语句,那么下面的决定可以帮助您。
这个查询的结果是:
l3zydbqr3#
你可以试试下面的sql,它过滤掉所有的负数。然后按负数降序排列,只选择第一行。