SQL之定值排序

本文主要介绍的是关于SQL的一种 条件排序,我称之为 定值排序。就是针对一个结果集,按照其中某些字段的一些判断条件进行排序。注意,这里介绍的是order的技术,而不涉及结果集是怎样select出来的。因为众所周知,order是发生在select之后的过程

    本文的读者群:如果你在对于结果集的排列顺序有着特殊需求,不仅单纯的需要按照某些列顺序或逆序,而又无从下手的话,那么这篇文章绝对的适合你!

    让我们开始:首先我要建立一个场景以便于你理解。某学校进行了一次数学考试,将学生的成绩存入数据库中。

建立分数表,并模拟10个学生的考试成绩数据:



  1. –建立成绩表   
  2. create table GradeList   
  3. (   
  4.     ID int identity(1,1) not null primary key,  –ID列  
  5.     Name nvarchar(20) null–姓名  
  6.     Grade int not null default(0)   –分数  
  7. )   
  8. –模拟测试数据:10个学生的成绩   
  9. insert into GradeList (Name,Grade)   
  10.     select ’王欣’,78 union all  
  11.     select ’李磊’,85 union all  
  12.     select ’赵晓芳’,66 union all  
  13.     select ’周刚’,94 union all  
  14.     select ’孙菲菲’,82 union all  
  15.     select ’王强’,100 union all  
  16.     select ’张剑’,77 union all  
  17.     select ’吴飞’,90 union all  
  18.     select ’刘霞’,71 union all  
  19.     select ’方明’,54   
  20.        
  21. select * from GradeList  

    结果集如下:学生成绩表

    一、一般情况下,我们需要出一个成绩单,那么对学生的成绩进行倒叙排列即可



  1. –成绩单(按照成绩倒叙排列)   
  2. select Name,Grade from GradeList order by Grade desc  

    结果集如下:成绩单

    二、然后有个特定的教务需求,要将成绩为90分的学生放在第一位,出一个成绩单(很可能现实中没有这种需求)。



  1. –将分数为90分的学生放在第一位   
  2. select Name,Grade from GradeList order by case when Grade=90 then 1 else 2 end asc  

    结果集如下:成绩为90分的排在第一的成绩单

    这里我应用了传说中的“定值排序”,是在order by语句后面使用case条件句实现的。在case中,校验Grade的值,当=90时,返回1;而其他值时,返回else中的2。最后,按照这个case条件句的返回值,升序(asc)排列,即1排在2之前。这样,当Grade=90的条目就会排在第一位了。

    三、接下来,进行一下复杂一些的应用:学校需要列出一个最需要教师关注的学生名单。最先关注不及格的学生(<60),辅导他们提高成绩;其次是优等生(>90),让他们保持成绩稳定;再次是刚刚及格的学生(>=60,<=70),加强他们学习的积极性;然后是成绩较好的学生(>=80,<=90),鼓励他们冲进第一线



  1. –按照特定的要求排序,在同一组排序中,按照成绩的降序排列   
  2. select Name,Grade from GradeList    
  3. order by    
  4.     case when Grade<60 then 1    
  5.     else case when Grade>90 then 2   
  6.     else case when Grade between 60 and 70 then 3   
  7.     else case when Grade between 80 and 90 then 4   
  8.     else 5   
  9.     end end end end,Grade desc  

    结果集如下:

    文章里面只是举了一个简单的例子,对于千变万化的数据库系统来说,很少会有这种简单的排序应用,但是万变不离其宗。只要掌握好order by后面的case语句使用就可以以不变应万变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值