//解法一:
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排序和分组子句
在union all中使用order by 报错的解决方案
最新推荐文章于 2024-02-28 21:22:39 发布
本文深入探讨了SQL中排序技巧,特别关注decode()函数和case语句在排序中的应用。通过具体示例,展示了如何高效地对不同状态的数据进行排序,包括解法一、解法二和解法三。此外,文章还讨论了SQL排序子句在union和unionall中的使用,并提供了实例以加深理解。
8694

被折叠的 条评论
为什么被折叠?



