【问题标题】:Split a query result based on the result count根据结果​​计数拆分查询结果
【发布时间】:2012-09-23 13:17:56
【问题描述】:

我有一个基于基本条件的查询,它将在任何一天返回 X 条记录。

我正在尝试检查基本查询的结果,然后根据 X 的总数对其应用百分比拆分并将其拆分为 2 个存储桶。每个桶将是 X 中返回的总查询结果的百分比。

例如:

  • 查询 A 返回 3500 条记录。

  • 如果从查询 A 返回的记录数

  • 如果从查询 A 返回的记录数 >=3001 且

  • 我希望返回实际记录,而不仅仅是对返回一行的记录进行的数学运算(在列中)。

【问题讨论】:

    标签: 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 使用视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多