0

プログラムごとのマークに基づいてユーザーのグループの十分位数を返す次のクエリがあります。

SELECT prog_code,
    user_code,
    user_mark,
  NTILE(10) over (order by user_mark DESC) DECILE
FROM grade_result
where user_mark IS NOT NULL
and prog_year = '2011'
AND prog_code = 'ALPHA'

これを同時に合計40の異なるprog_code値に対して実行する必要があります。これは、39のユニオン結合を介して結合できますが、これは非常に非効率的です(十分位数のように、これを単一のselectステートメントとして実行することはできません。プログラムではなく、すべてのプログラムに対して)。自分で入力しなくても、これらの40個の値のそれぞれに対してユニオンとしてクエリを繰り返す(ループする)方法はありますか?

これが何らかの用途である場合は、プログラムコードと行番号を別のクエリまたはサブクエリで返すことができます。

ROWNUM         PROG_CODE

1              ALPHA
2              BETA
3              GAMMA
4              DELTA
5              ECHO
4

1 に答える 1

2

NTILE関数で単にpartition句を使用できますか?

SELECT prog_code,
    user_code,
    user_mark,
  NTILE(10) over (PARTITION BY prog_code ORDER BY user_mark DESC) DECILE
FROM grade_result
where user_mark IS NOT NULL
and prog_year = '2011';
于 2013-03-12T15:43:44.833 に答える