【第22期】观点:IT 行业加班,到底有没有价值?

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
强哥,你也该说话了,
强哥,你好好想想,然后不要说话,粗去,表捣乱。



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

相关文章推荐

sqlserver中的sql语句中1=2什么意思

1=2表示没有其它条件时不查出数据,用作where拼接sql句子

跟我一起学Microsoft SQL Server 2012 Internals(1.3)

目录 目录 正确理解SQL Server元数据 参考资料正确理解SQL Server元数据每个SQL Server 实例(instance)在正确安装后,均可看到如下4个系统database: m...

在CentOS 7.3上安装SQL Server vNext CTP 1.2

SQL Server vnext CTP 1.2支承在红帽企业Linux、SUSE Linux企业服务器和Ubuntu。它也可作为一个Docker镜像,可以运行在Linux或Windows / Mac...

控制TextBox只能输入浮点数

/// /// 控制TextBox只能输入数字 /// /// /// private void TextBoxFloat_KeyPress(object sender, KeyPressEv...

1、如何在Delphi中实时判断SQL Server服务器的状态;2、当服务器程序有对数据库表进行操作时,如何通知其它程序及时更新数据最为安全,可靠,快速

1、如何在Delphi中实时判断SQL Server服务器的状态。2、如何在Delphi中实现当服务器程序有对数据库表进行操作时,立即通知其它程序及时更新数据最为安全,可靠,快速。
  • haloon
  • haloon
  • 2005-03-28 14:41
  • 1041

用1、2、2、3、4、5这六个数字,数字排序经典算法

关键字:用1、2、2、3、4、5这六个数字,数字排序经典算法 public class Numarray { /** 用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列, 如:512234、412345等,要求: "4 "不能在第三位, "3 "与 "5 "不能相连. */ public static void main(String[] a){ long start; System.out.println("结果是:"); int count = 0 ; for(start=122345;start

asp fso读取文件夹,如何按照(1:按创建时间 2:按访问时间 3:按修改时间 4:按名称)排序(2008-09-18,11:19:18)

  • 微博
    微信
    QQ
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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