我必须使用DECODE
来实现自定义排序:
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC
如果col1的值超过了decode子句中指定的三个值,会发生什么?
答案 0 :(得分:3)
对于未指定的col1值,DECODE将返回NULL 默认情况下,NULL值将放在前面。
如果要更改此行为,可以在DECODE中定义默认值
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1, 0) DESC
或订单条款中的NULLS LAST
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1) DESC NULLS LAST
答案 1 :(得分:1)
decode函数将返回NULL值,它位于排序的底部。你可以验证它: 从双重选择解码('z','a',3,'b',2,'c',1);
您还可以在订单子句中使用NULLS LAST / NULLS FIRST控制空值的外观。
答案 2 :(得分:1)
正常它会将某些结果作为默认值,如果不是NULL就是你得到的所以最后在这样添加一些值
SELECT col1, col2 FROM tbl ORDER BY DECODE(col1, 'a', 3, 'b', 2, 'c', 1, 0) DESC
这样,如果col1有更多的值,它们都将返回0