Oracle - 分组并维护分组记录

问题描述 投票:0回答:1

如何维护所有记录分组并将其存储在单独的表中。

基表:

对 COLA 、 COLB 上的数据进行分组并对 COLC 求和

Select COLA,COLB,SUM(COLC) 
FROM TAB2

然后使用 Sequence 生成密钥。

需要维护的输出如下。 考虑到有 100 个执行 group by 的列,我们如何维持这种关系

选项 1:尝试下面的查询来获取结果,但它看起来确实很有效。

Select TAB1.KEY , TAB2.KEY 
FROM TAB1 
INNER JOIN TAB2 ON TAB1.COLA=TAB2.COLA 
AND TAB2.COLB=TAB2.COLB

选项2:在对数据进行分组和求和时,以逗号分隔的键存储可能在clob列中,然后在不同的sql中再次将其分解。

RTRIM(XMLAGG(XMLELEMENT(E,KEY,',').EXTRACT('//text()') ).GetClobVal(),',')
sql oracle group-by aggregate-functions oracle19c
1个回答
0
投票

因此,如果需要连接 N 列,其中一些恰好为空,那么最好使用 standard_hash 进行连接。 比如:

from table_1 a
join table_2 b on (
  standard_hash(a.col||'|'||a.col2||...||'|'||a.coln, 'SHA512')=
  standard_hash(b.col||'|'||b.col2||...||'|'||b.coln, 'SHA512')
  )

该函数也可用于创建索引。我的建议就这么多了。 我发现包含 sum 的表有一个大问题。当第一个表上有一些插入、更新或删除时,你能确定它会同步吗?我宁愿创建一个视图或物化视图。不过,当您拥有大量数据时,可能会出现问题。有分区吗?嗯,你应该比我更了解你的业务的各个方面......

© www.soinside.com 2019 - 2024. All rights reserved.