我正在尝试在单个查询中找到使用分析函数的方法。这是我的问题:
我的数据:根据相似性记录预先组织成SET(如下所示)。
我的目标:我正在尝试将这些集合重新分组,以便尽可能地将来自同一SET的记录放在同一组中。
E.g:
什么行之有效:
以下是我的代码,它似乎完全符合我的要求。
/**** First update set wise row num ****/
insert into my_set_stage_1
select text,
set,
row_number() over(partition by set order by text) as set_sequence
from my_set;
/**** Next add to group using NTILE ****/
insert into my_set_stage_2
select text,
set,
set_sequence,
ntile(10) over(order by set_sequence) as group_id
from my_set_stage_1 s;
我的问题:
我的实际数据量很大。如您所见,我正在使用2个中间表= 2个大查询。是否可以使用分析函数在单个查询中设置group_id?
任何帮助表示感谢。
答案 0 :(得分:0)
为什么不在没有插入的情况下执行这些选择?
select s.text,
s.set,
s.set_sequence,
ntile(10) over(order by s.set_sequence) as group_id
from (
select text,
set,
row_number() over(partition by set order by text) as set_sequence
from my_set
) s
“如果查询执行计划成本保持不变或减少。”
解释计划将向您显示执行SELECT语句的成本。它不会向您展示的是将大量数据插入(临时?)表的开销。我们希望减少完整的成本 - 返回结果集的时间 -
显然,对大量数据进行排序并不是一项廉价的工作。此时通常的调整问题适用。多少数据是“高容量”?您可以使用哪些系统资源(内存,CPU)?这是一次性的练习还是反复出现的任务?