给出以下架构
CREATE TEMP TABLE tmp_table
(
id_bucket int2 NOT NULL,
id_property int2 NOT NULL,
v1 varchar(320) NOT NULL,
v2 varchar(320) NULL
);
以及以下数据
id_bucket id_property v1 v2
------------------------------
1 3 OT A
1 8 RO C
1 2 OT C
1 1 RT D
1 5 OT C
1 4 OT C
我希望 v1 和 v2 具有相同值的所有行(在本例中 v1 = OT,v2 = C)都更新为除NULL
1 之外的 v2 值,无论.
我尝试按我的标准进行分组,但随后我丢失了相关行的详细信息。我知道id_property
可能会有用,但是当使用 GROUP BY 时,我无权访问该列。
我已经为这个问题抓狂了一段时间了。有任何想法吗 ?
您的解决方案是分析函数,又称窗口函数。
结果是
有关完整示例,请参阅 DB-fiddle。
基于窗口函数的解决方案的好处是基础表仅被选择一次,而基于分组依据的类似解决方案通常需要至少第二次选择表。这使得窗口函数更加高效。当然,只有当表变大时,这才真正相关。