oracle sql排名和条件语句计数

三国

我坚持根据特定条件对行进行分类的过程。我希望在你们的支持下解决这个问题!基本上,我试图通过应用一些特定公式在表中创建两个新列。这些列是通过指定每个PRAC是否被列入排名的体积每年也为分类top 3 claims2014not在以下示例中,突出显示的列light blue是我要创建的列。

在此处输入图片说明我的查询如下所示-现在我在为上面的最后两行编写代码时遇到问题fromgroup by并且having似乎在这些括号内不起作用。请帮忙!!

select    
    fiscal_year,
    prac,
    count(*) "CLAIMS",
    sum(paid_amount) "COST",
    row_number() over (group by fiscal_year order by count(*) desc) "Annual Rank by Claims",
    case
        when row_number() over (having fiscal_year = '2014' order by count(*) desc) < 4
        then  'YES'
        else 'NO' 
    end "PRAC TOP 3 IN CLAIMS 2014"    
from mys.mv_claim
where category = 'V'
group by  fiscal_year,
    prac

/
凯斯·贾德

我从未见过在分区规范中使用GROUP BY和HAVING。我怀疑这是语法错误。我认为您的查询需要看起来更像:

WITH t as (
 select    
  fiscal_year,
  prac,
  count(*) "CLAIMS",
  sum(paid_amount) "COST"  
 from mys.mv_claim
 where category = 'V'
 group by  fiscal_year, prac
)
SELECT 
  t.*,
  rank() over (partition by fiscal_year order by claims desc) "Annual Rank by Claims",
  case
    when prac in(select prac from (select * from t where fiscal_year = 2014 order by claims desc ) where rownum <= 3)
    then  'YES'
    else 'NO' 
  end "PRAC TOP 3 IN CLAIMS 2014"
from t

我使用了等级而不是行号,因为两个相同的索赔计数将产生相同的等级值。然后,等级将跳过下一个等级(两个999个索赔计数将分别排在第1位,一个998个索赔计数将排在第3位。如果要使其排在第2位,请使用density_rank)

让我知道您是否对此有任何错误,因为我不确定唯一可以解决的事情是检索前3个练习的子选择。可以用左联接来代替(我对此更有信心)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章