SQL中-1,1,2,3四个状态排序为 1,2,3,-1

原创 2016年05月31日 14:50:10

        首先,这个故事从一次项目维护讲起,因之前有很大一批数据显示状态为  失败,即-1。经理觉着不好看,影响客户对系统的第一印象。于是希望把状态为 成功的数据的提前,即1。而2,3在数据库中则分别代表正在建档,语音不够 提示。

那么问题来了,之前的数据是按照录入时间进行排序的,即createDate。首先声明一下,我很懒,所以希望能在不改变太多SQL的情况下去解决这个问题。

经过大概一个小时的头脑风暴之后,我想出来的解决方案是:(该字段为state)

将原先的SQL改为   order by 1/state desc;

其实,我是有些庆幸自己的小聪明,成功地成就了我的懒。

但是事情如果就这样结束的话,也就没有太大意思了。随后我把这个问题发到了我们的撕逼小组“十一度的青春”(之前据说是因为有十一个人,后来发现不够十一个,再后来就不止11个了,反正我们都不是很明白为什么是十一度,可能只是在安抚这帮燥热的少年)。

题目如下:将某一状态可能为-1,1,2,3的数据进行SQL排序为1,2,3,-1。

首先,八哥进行了热情回应:case when + asc  。不过很明显,只是随便那么一想。

随后,我讲出了自己之前的解决方案,他们在“非常礼貌”地吹捧了一番这个想法之后,可能有些被这个小聪明感动,开始了各自的头脑风暴。

强哥首先提出质疑:这个state是“0”的话会报错。当然被排除。

小六给出的方法为  decode(-1,4),其实我自己并不知道这个方法是干嘛用的。

八哥进一步完善了自己的想法: SQL语句有些小问题敬请忽略,看逻辑

  select id,case this when this < 0 then -1 when this > 0 then 1 as index from t order by index desc this asc  ;
并且对小六的想法进行了完善,发现和case when是一个套路,只是写法简单一些:
Select decode (id,1,1,2,2,3,3,-1,4,0) id from t order by id asc;
这时强哥提出问题:用case when 效率低。  
小六的分析结果是:他是上上上下的顺序  怎么乘都不对
可能对这一波的答案,大家都不是很满意。
于是,八哥率先发起了第二波攻势:select id from t order by length(id) asc, id asc ; 负数长度比正数长。
小六随后跟风,这个效率最高。
强哥不服,道:我也想到了一个。 我回复:快说。 于是进入了真空期。
八哥紧跟着进行了第三波攻势:
SELECT id FROM t ORDER BY conv(id,10,2) asc; 把十进制转二进制,负数转之后是1开头,仅该情景可用。
这个时候,我发出了自己由衷的赞叹:这个厉害!666666
强哥,你也该说话了,
强哥,你好好想想,然后不要说话,粗去,表捣乱。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sql 根据状态自定义排序

SELECT count(1) FROM fctr_customer fc  INNER JOIN  ( SELECT * from ( SELECT * FROM fctr_lo...

休眠与待机等状态面面观(S0,S1,S2,S3,S4,S5)

本文转载于 http://zhuairlunjj.blog.163.com/blog/static/8005094520104603338240/   休眠与待机等状态面面观(S0,S1,S2...
  • MM22GG
  • MM22GG
  • 2012-05-02 15:54
  • 2180

HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义

HTTP协议状态码,是指在HTTP协议运作中由客户端发出请求连接,服务端建立连接,客户端发出HTTP请求,服务端返回响应信息,而在这个过程张由于客户端或服务端的问题会返回相应的错误代码并显示给用户,对...

HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别表示什么,列举常见错误码及含义

转自:http://m.blog.csdn.net/blog/u013857407/21741847 HTTP协议状态码,是指在HTTP协议运作中由客户端发出请求连接,服务端建立连接,客户端发出HT...

sql 将‘1,2,3,4’转成相应的表,字段分隔表值函数,一行变多行,

再设计表的时候我们经常遇到这样的情况,字段的值为1,2,3,4 等字符隔开的情况,存的是数字,但是显示的时候是对应的类别,直接上图,清楚明了, 如何想得到 分两步完成,步骤如下:...

面试题:sql实现,根据table1,table2得出table3

提醒:题目中提供的table3有部分结果是错误的,请注意。 CREATE TABLE table1(mon varchar(100),dep varchar(100),yj in...

生成大量的测试数据的三种方法,1写sql,2工具plsql,3LoadRunner

性能测试场景之一:  [1]03 临时表里有20W记录,发送ESB  说明:结算后台对完账后,在对账汇总确认菜单中点“确认”按钮,系统会将已清算的数据信息插入资金库的临时表pac_biz_acco...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)