我有一个具有以下结构的表:
create table Z_TEST_ONE
(
col_id NUMBER,
bed_amnt NUMBER,
bes_amnt NUMBER,
bop NUMBER
)
样本数据是这样的:
col_id bed_amnt bes_amnt bop
---------- ----------- ---------- -------
1 1000 0 20
1 5000 0 7
1 0 3000 10
1 0 6 14
2 1000 0 1
2 2000 0 2
2 0 1000 3
2 0 2000 4
现在我需要的是:对于每个col_id
,最高的 bop 列bes_amnt
必须等于最高的 bop bed_amnt
。因此,执行查询后,结果必须如下所示:
col_id bed_amnt bes_amnt bop
---------- ----------- ---------- -------
1 1000 0 20
1 5000 0 7
1 0 3000 7 ---> changed from 10 to 7
1 0 6 14
2 1000 0 1
2 2000 0 2
2 0 1000 3
2 0 2000 2 ---> changed from 4 to 2
我为此写了一个查询,如下所示:
update z_test_one a
set a.bop =
(select t.bop /* bop for highest bed_amnt */
from z_test_one t
where t.bed_amnt = (select max(bed_amnt)
from z_test_one
where col_id = a.col_id
group by col_id))
where a.bes_amnt = (select max(bes_amnt)
from z_test_one
where col_id = a.col_id
group by col_id)
这个查询工作正常并给了我正确的结果,我想知道是否有更好的方法来编写所需的查询。
提前致谢
我想知道通过以下方式找到新值是否会更好:
也许 where 子句可能会更好:
我会用你的数据量、统计数据等来测试它们,看看实际计划和执行情况如何比较。