在union all中使用order by 报错的解决方案

本文深入探讨了SQL中排序技巧,特别关注decode()函数和case语句在排序中的应用。通过具体示例,展示了如何高效地对不同状态的数据进行排序,包括解法一、解法二和解法三。此外,文章还讨论了SQL排序子句在union和unionall中的使用,并提供了实例以加深理解。

//解法一:   
select * from (     
       select col_1,col_2,col_3,status     
       from t     
       where status >= 0     
       order by status)     
union all     
select * from (     
       select col_1,col_2,col_3,status     
       from t     
       where status < 0     
       order by status)     
/     
COL_1  COL_2   COL_3      STATUS     
------ ------- ------ ----------     
花生   瓜子    绿豆            0     
芍药   牡丹    月季            1     
优乐美 香飘飘  炸鸡            2     
牙膏   牙刷    杯子            3     
china  america canada         -1    
//解法二:   
select * from t    
order by    
      decode(status,   
             -1,1,   
             3,2,   
             2,3,   
             1,4,   
             0,5) desc   
/   
//这可是一个很妙的排序,本人首次看到在order by语句中可以使用decode()函数来排序   
//同理,我们也可以使用case语句来排序:   
//解法三:   
select * from t    
order by    
      case status   
      when -1 then 5   
      when 3 then 4    
      when 2 then 3    
      when 1 then 2    
      else 1   
      end    
/   
//union 和union all中都支持order by和group by排序和分组子句

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值