提问人:sharan jain 提问时间:10/26/2023 最后编辑:sharan jain 更新时间:10/27/2023 访问量:43
Oracle — 分组依据和维护分组记录
Oracle - Group By and Maintain Grouping Records
问:
如何维护所有记录的分组并将其存储在单独的表中。
基表:
在对 COLA 、COLB 上的数据进行分组后,将其汇总为 COLC
Select COLA,COLB,SUM(COLC)
FROM TAB2
然后使用 Sequence 生成密钥。
需要维护的输出如下。 考虑到有 100 列执行分组依据,我们如何保持这种关系
选项 1:尝试以下查询以获取结果,但它看起来确实有效。
Select TAB1.KEY , TAB2.KEY
FROM TAB1
INNER JOIN TAB2 ON TAB1.COLA=TAB2.COLA
AND TAB2.COLB=TAB2.COLB
选项 2 : 在对数据进行分组和求和时,将 key 存储在逗号分隔的 clob 列中,然后在不同的 sql 中再次中断它。
RTRIM(XMLAGG(XMLELEMENT(E,KEY,',').EXTRACT('//text()') ).GetClobVal(),',')
答:
0赞
Bogdan Dincescu
10/27/2023
#1
因此,如果您需要按 N 列进行联接,其中有些恰好是 null,最好使用 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')
)
此函数还可用于创建索引。这就是我可能建议的。 我看到包含总和的表存在一个大问题。当第一个表上有一些插入、更新或删除时,您能确定它会同步吗?我宁愿创建一个视图或具体化视图。不过,当您拥有大量数据时,可能会出现问题。有分区吗?好吧,你应该比我更了解你的业务的各个方面......
评论
0赞
sharan jain
10/27/2023
是的,我的表是基于不同file_id分区的,我只逐个文件运行过程。
评论