PLSQL-计数“N”个最大值

PLSQL-计数“N”个最大值,plsql,Plsql,下表为:列:ID-CAUSE-WORK ID | CAUSE | WORK A | C1 | W1 B | C1 | W1 C | C1 | W1 D | C1 | W1 E | C1 | W2 F | C1 | W2 G | C1 | W2 H | C1 | W3 I | C1 | W3 FF | C2 | W4 FG | C2 | W4 FG | C2 |

下表为:列:ID-CAUSE-WORK

ID  | CAUSE | WORK
A   |   C1  |  W1
B   |   C1  |  W1
C   |   C1  |  W1
D   |   C1  |  W1
E   |   C1  |  W2
F   |   C1  |  W2
G   |   C1  |  W2
H   |   C1  |  W3
I   |   C1  |  W3
FF  |   C2  |  W4
FG  |   C2  |  W4
FG  |   C2  |  W1
FG  |   C2  |  W1
FG  |   C2  |  W6
我想要每个原因的两个最大工作计数值。也就是说,通过一个简单的原因统计工作组,结果将是:

cause | work| count(work)
c1    |  w1 | 4
c1    |  w2 | 3
c1    |  w3 | 2
c2    |  w4 | 2
c2    |  w1 | 2
c2    |  w6 | 1
我只希望每个原因最多2次计数:

c1    |  w1 | 4
c1    |  w2 | 3
c2    |  w4 | 2
c2    |  w1 | 2
这应该起作用:

select cause,
       work,
       cnt as "COUNT"
from (
  select cause, 
         work, 
         count(work) as cnt,
         row_number() over (partition by cause order by count(work) desc, work desc) as rown
  from your_table group by cause, work
) where rown <= 2;

您好,查询返回的最大计数只是一个唯一的值。我需要的是每个原因最多2个工作量=我的示例中的4个值如果您对结果满意,请将问题标记为已回答,谢谢。
select cause,
       work,
       cnt as "COUNT"
from (
  select cause, 
         work, 
         count(work) as cnt,
         row_number() over (partition by cause order by count(work) desc, work desc) as rown
  from your_table group by cause, work
) where rown <= 2;