order by子句对查询结果集进行排序
- 多列和拼接
多列的方式就很简单了
select firstname,lastname
from person.person
order by lastname,firstname;
这句话表示根据lastname和firstname两列进行排序,并且是先按照lastname进行排序如果有相同的值就按照firstname进行排序。
拼接很有意思,可以写成这个样子
select
lastname+‘,‘+firstname as fullname
from person.person
order by lastname+‘,‘+firstname;
这是把表达式放在了order by子句中了,当然也可以把order by子句中的表达式换成select子句中的别名fullname
另外还有一种写法是把列的位置写在order by子句中,还不是很了解这样写法的目的,之后应该有更加详细的讲解。
- 可以使用case
select description,len(description) as textlength from production.productdescription where description like ‘replacement%‘ order by case when left(Description,5)=‘This ‘ then stuff(description,1,5,‘‘) else description end;
这句话的意思是根据description排序,case的作用是如果description值得第一个单词是This就把它截掉。
top谓词
我印象中top的作用很小,也就是查询某一个表里的前几条数据,但是这次知道了还有percent和with ties的存在
- percent
遇到求百分比结果集的时候可以把top和percent连用
select top(3) percent ... from ....
这样的写法是表示查询前百分之30的数据。
- with ties
应对查询成绩前三名的同学如果简单的使用 select top(3) ... from 这样的句式其实是有问题的,如果满足条件的数据不只三条,比如说有好几个人并列第三。with ties就是来解决这个问题的。
select top(3) with ties ...from ...
这样的写法表示,如果最后一条有满足条件的数据也包含在查询结果里,所以最终查出来的结果并不一定是3条数据。