{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

SQL中,排序的语法是?正序/倒序如何表示?

XGBCCCXGBCCC 回答0 收藏1
收藏问题

2条回答

callmewhy

callmewhy

回答于2022-06-28 14:28

SQL中的排序要使用关键字order by,后面跟上指定的排序列名称即可。排序类型分升序和降序,升序为ASC,这也是默认的类型;降序为DESC。指定的排序列可以有多个,多个列之间用半角逗号隔开。这就是基本的排序语法。

但是,看起来非常简单的排序,其实里面也大有学问,以下几点特别提醒注意:

当order by和top配合使用时,返回的记录数有时可能并不是你所希望的

当在select子句中用到top谓词时,一般都是和order by一起配合使用,这是因为:只有对排序以后的数据提取前N行的值时才有意义。而当top和order by组合使用时,又会出现一种特殊的情况:如果指定范围内的最后一条记录有多个相同值,那么这些值对应的记录也会被返回,也就是说,最后返回的记录数可能会大于指定的数量。

如下图,尽管指定的数量是4个,但最终的返回记录数却是5。原因就在于,用于排序的列“产品id”的最后一行有相同的两个值:

如果在上述语句中不使用order by,则返回的记录数正常是4条。

以上情况在MySQL数据库中就不会出现,因为它不支持Top的写法,它使用的是limit,因此还要注意不同数据库中的差别。

当在排序中使用聚合函数时,必须同时使用group by子句,尽管这个聚合函数可以不出现在select子句中。

例如,要对订单表中的产品按照数量合计倒序排序,可以这样写:

尽管select子句中不需要生成数量的合计列,但也必须使用group by。只有这样,order by中才能使用聚合函数。当然,如果在select中加上sum(数量),输出的排序结果会更直观一些:

select中的聚合函数和排序中的聚合函数未必相同,例如下面的语句,产品名称虽然是按数量合计数排序,但输出的却是单价中的最高值:

当SQL语句中同时出现where、group by和order by时,where必须排在第一位,group by其次,order by放在最后。

我是人民邮电出版社签约作者,期待您的关注,欢迎留言和我交流,谢谢!

评论0 赞同0
  •  加载中...
wean

wean

回答于2022-06-28 14:28

前面查询就不写了,不同的数据库有略微差别。排序用关键字 order by来表示,后面跟要进行排序的字段名或键值,其后用asc表示升序,desc表示倒序。可以有多个排序字段,用逗号分隔。完整的例子: select field1,field2,field3 from sometable order by field1 asc,field2 desc

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<