1

Oracleクエリで複数のグループの結果をN個にするにはどうすればよいですか。

例については、次の表を参照してください。

    ID  Team    Auditor
    1   Tm1     Jill
    2   Tm2     Jill
    3   Tm1     Jill
    4   Tm2     Jack
    5   Tm2     Jack
    6   Tm2     Jack
    7   Tm3     Sam
    8   Tm1     Sam
    9   Tm5     Sam

より多くの監査人とチームがいるより多くの行があります。可能な場合は、監査人ごとに3つのチームを作成し、3つの異なるチームを作成したいと思います。

私はすでに次のSQL(このクエリに応答して投稿された各グループの上位の結果を取得(Oracle))を使用して、監査人ごとに3つのチームを返していますが、同じチームの3つを取得することもあります。これは実際には理想的ではありません(を参照)。ジャック)。

select * 
  from (select ID, 
               Team, 
               Auditor, 
               rank() over ( partition by Auditor order by ID) rank 
          from table) 
 where rank <= 3;
4

1 に答える 1

1

あなたのテストデータはあなたが説明したケースをカバーしていません。

あなたはこれを行うことができます:

select * 
from(
    select ID, 
           Team,
           Auditor,
           row_number() over (partition by Auditor order by rank1) as rank
      from (select ID, 
                   Team, 
                   Auditor, 
                   row_number() over (partition by Auditor, team order by id) rank1 
              from table) 
      )
where rank <= 3;

ただし、2種類あるため、これはより高価になります。

内部クエリは、Auditor、Teamの最初の組み合わせ1つ、2番目の組み合わせ2つなどでランク付けされます。

中央のクエリは、監査人の行を内側のランクの後にランク付けするため、監査人は最初に異なるチームの行をランク付けします。

外側のクエリは、すべての監査人の最初の3行を取得します。

于 2012-05-01T11:35:26.363 に答える