1
問題:如何返回下面付款排名查詢中前5個值的AVG。返回查詢結果中前5個值的AVG
數據庫:的Oracle 11g
當前查詢
select distinct pye.payeeid, pay.value,
dense_rank() over (partition by bu.name order by pay.value DESC) as "Payment Ranking"
from cs_period per, cs_payee pye, cs_payment pay, cs_businessunit bu
where per.name = 'August 2014'
and pye.payeeseq = pay.payeeseq
and pay.businessunitmap = bu.mask
and pye.effectiveenddate = to_date('01/01/2200','dd/mm/yyyy')
and pye.removedate = to_date('01/01/2200','dd/mm/yyyy')
and per.periodseq = pay.periodseq
order by pay.value DESC
結果
快速的問題 - 你想在RANK()方面或在DENSE_RANK()方面的前5名?我問的原因是可以有超過5行的DENSE_RANK()爲5或更低,所以如果你想根據你的「支付排名」計算前5,那麼基於ROWNUM的解決方案將不起作用。 –
無論獨特性如何,我都需要前5名的AVG。例如,假設{500,400,400,300,200,200,100}中的前7位,我將計算500,400,400,300,200中的前5位AVG。這是DENSE_RANK的正確用法嗎?謝謝! – jdgaub
好吧,那麼你想要使用'ROWNUM'而不是'DENSE_RANK()'的計算值的解決方案。在這種情況下'DENSE_RANK()'是否適合真正滿足您的業務需求! –