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 语句运行,因为 decile 将是对于所有程序,而不是按程序)。有没有一种方法可以让查询重复(循环?)这 40 个值中的每一个作为一个联合,而不必自己输入每个值?

如果有任何用途,我可以在单独的查询或子查询中返回程序代码和 rownum:

ROWNUM         PROG_CODE

1              ALPHA
2              BETA
3              GAMMA
4              DELTA
5              ECHO
4

1 回答 1

2

Can you simply use the partition clause in your NTILE function?

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 回答