3

特定の日にX個のレコードを返す基本的な基準に基づくクエリがあります。

基本的なクエリの結果を確認してから、Xの合計に基づいてパーセンテージ分割を適用し、2つのバケットに分割しようとしています。各バケットは、Xで返されるクエリ結果全体のパーセンテージになります。

例えば:

  • クエリAは3500レコードを返します。

  • クエリAから返されるレコードの数が3000未満の場合、3500レコードを40%/ 60%の分割(1,400 / 2,100)に分割します。

  • クエリAから返されるレコードの数が>=3001かつ<=50,000の場合、レコードを10%/ 90%のsplit.Etcに分割します。等。

  • (列に)数値を含む1つの行を返すレコードに作用する数学だけでなく、実際のレコードを返したいのですが。

4

1 に答える 1

4

結果の行セットのさまざまな部分を表示する方法がわからないので、行が最初の部分と- 2 番目の部分に属することを示すpart値を含む行の結果セットに column( ) を追加しました。 . 12

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 に答える