【问题标题】:Split a query result based on the result count根据结果计数拆分查询结果
【发布时间】:2012-09-23 13:17:56
【问题描述】:
我有一个基于基本条件的查询,它将在任何一天返回 X 条记录。
我正在尝试检查基本查询的结果,然后根据 X 的总数对其应用百分比拆分并将其拆分为 2 个存储桶。每个桶将是 X 中返回的总查询结果的百分比。
例如:
【问题讨论】:
标签:
sql
oracle
oracle10g
oracle11g
【解决方案1】:
我不确定您希望如何显示结果行集的不同部分,因此我刚刚在结果行集中添加了额外的列 (part),其中包含值 1 指示该行属于第一部分和2 - 第二部分。
select z.*
, case
when cnt_all <= 3000 and cnt <= 40
then 1
when (cnt_all between 3001 and 50000) and (cnt <= 10)
then 1
else 2
end part
from (select t.*
, 100*(count(col1) over(order by col1) / count(col1) over() )cnt
, count(col1) over() cnt_all
from split_rowset t
order by col1
) z
Demo #1 行数 3000。
Demo #2行数3500。
为了更好的可用性,您可以使用上面的查询创建一个视图,然后按part 列查询该视图过滤。
Demo #3 使用视图。