case when分类(oracle)

1571886351(1).jpg1571885718(1).jpg根据大小分类

字段A为数值型,里面有很多数据

大小排名前3的分成一类,

如何写语句呢?

case when 语句 then '前3'  

        else '其他' end

如何写when后面的语句满足A是前3大的条件

傅军超 发布于 2019-10-24 10:33 (编辑于 2019-10-24 16:05)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
1
axingLv6专家互助
发布于2019-10-24 10:44(编辑于 2019-10-24 10:46)
select a,case when b<=3 then '前三' else '其他' end as b from ( 
	 select a,
	 row_number()over(order by a desc) as b,   --大到小排名
	 from table 
	 where ...
	 ) t


  • 傅军超 傅军超(提问者) 我试了下,并不是根据大小排序的
    2019-10-24 11:06 
  • 傅军超 傅军超(提问者) 我的字段是nvarchar类型,但是里面存的是数字
    2019-10-24 11:08 
  • axing axing 回复 傅军超(提问者) 对应部分修改成 order by a*1 desc
    2019-10-24 11:25 
最佳回答
1
wengleiLv4初级互助
发布于2019-10-24 10:40(编辑于 2019-10-24 11:40)

(case when ROW_NUMBER()over(order by 数值A desc) < 4 then '等级一' else '等级二' end) 


个人意见,希望有所帮助



image.png




image.png

image.png



  • 傅军超 傅军超(提问者) 因为我要算的是利润,所以数值A应该是(A.收入-B.成本), (case when ROW_NUMBER()over(partition by (A.收入-B.成本) desc) < 4 then \'等级一\' else \'等级二\' end) 这样写对吗
    2019-10-24 10:46 
  • wenglei wenglei 回复 傅军超(提问者) 嗯嗯,可以这样的。如果数据量大的话,建议先创建一个子查询吧
    2019-10-24 10:49 
  • 傅军超 傅军超(提问者) 回复 wenglei 为啥会报00907,缺失右括号的错呢
    2019-10-24 10:54 
  • 傅军超 傅军超(提问者) 我发了个图片
    2019-10-24 10:56 
  • wenglei wenglei 回复 傅军超(提问者) 我这边使用的是sql server, 不同的数据库之间使用是有一定的差别的
    2019-10-24 11:41 
最佳回答
0
萌萌的呆贼Lv4初级互助
发布于2019-10-24 10:45

select case when rn<=3 then '一类' else '其他' end from

(select  A,row_number() over(order by A desc) as rn from tab) as xx


最佳回答
0
qhlLv6中级互助
发布于2019-10-24 10:45

建议先做一个子查询,子查询先排序并增加一列排序序号,然后再查询的时候用序号字段来判断前三和其他

  • 5关注人数
  • 726浏览人数
  • 最后回答于:2019-10-24 16:05
    请选择关闭问题的原因
    确定 取消
    返回顶部