3

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

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

例如:

  • 查询 A 返回 3500 条记录。

  • 如果从查询 A 返回的记录数 <= 3000,则将 3500 条记录拆分为 40% / 60% 拆分 (1,400 / 2,100)。

  • 如果从查询 A 返回的记录数 >=3001 且 <=50,000,则将记录拆分为 10% / 90% 拆分等。等等。

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

4

1 回答 1

4

我不确定你想如何显示结果行集的不同部分,所以我刚刚part在结果行集中添加了额外的 column(),其中包含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

演示 #1 行数 3000。 演示 #2行数 3500。

为了更好的可用性,您可以使用上面的查询创建一个视图,然后按part列查询该视图过滤。

演示#3使用视图。

于 2012-10-02T19:13:57.253 回答