{eval=Array;=+count(Array);}
SQL中的排序要使用关键字order by,后面跟上指定的排序列名称即可。排序类型分升序和降序,升序为ASC,这也是默认的类型;降序为DESC。指定的排序列可以有多个,多个列之间用半角逗号隔开。这就是基本的排序语法。
但是,看起来非常简单的排序,其实里面也大有学问,以下几点特别提醒注意:
当在select子句中用到top谓词时,一般都是和order by一起配合使用,这是因为:只有对排序以后的数据提取前N行的值时才有意义。而当top和order by组合使用时,又会出现一种特殊的情况:如果指定范围内的最后一条记录有多个相同值,那么这些值对应的记录也会被返回,也就是说,最后返回的记录数可能会大于指定的数量。
如下图,尽管指定的数量是4个,但最终的返回记录数却是5。原因就在于,用于排序的列“产品id”的最后一行有相同的两个值:
如果在上述语句中不使用order by,则返回的记录数正常是4条。
以上情况在MySQL数据库中就不会出现,因为它不支持Top的写法,它使用的是limit,因此还要注意不同数据库中的差别。
例如,要对订单表中的产品按照数量合计倒序排序,可以这样写:
尽管select子句中不需要生成数量的合计列,但也必须使用group by。只有这样,order by中才能使用聚合函数。当然,如果在select中加上sum(数量),输出的排序结果会更直观一些:
select中的聚合函数和排序中的聚合函数未必相同,例如下面的语句,产品名称虽然是按数量合计数排序,但输出的却是单价中的最高值:
我是人民邮电出版社签约作者,期待您的关注,欢迎留言和我交流,谢谢!
前面查询就不写了,不同的数据库有略微差别。排序用关键字 order by来表示,后面跟要进行排序的字段名或键值,其后用asc表示升序,desc表示倒序。可以有多个排序字段,用逗号分隔。完整的例子: select field1,field2,field3 from sometable order by field1 asc,field2 desc
0
回答0
回答0
回答0
回答0
回答0
回答1
回答0
回答0
回答0
回答