Excel 2010 SQL应用089 指定不同排序方法的多列排序

目录

源数据表

解决方案

指定不同排序方法的多列排序

利用数学计算方法进行多列排序


源数据表

球队进球失球积分
球队1729
球队2370
球队3444
球队4554

    如图所示为某次足球比赛小组赛成绩表。根据出线规刖,该小组只能有两支球队出残。出线规则是积分靠前的两支球队出线;当积分相同时,净胜球(进球一失球)多的球队出线;当净胜球相同时,进球多的球队出线。

解决方案

SELECT TOP 2 球队 AS 出线球队
FROM [sheet1$]
ORDER BY 积分 DESC,进球-失球 DESC,进球 DESC

指定不同排序方法的多列排序

    ORDER BY子句可以进行多字段的数据排序,并且可以在各字段之后加上关键字ASC或者DESC指定排序方式.
    本例中,要求得到出线球队,首先取积分高的球队,然后取净胜球多的球队,最后取进球多的球队.该方式符合多字段排序中依次排序的方式,因而可以采用多字段排序按照积分、净
胜球、进球进行降序排序,再利用TOP谓词取得排序结果中的前两条记录即为出线球队。
    在多字段排序中,若要指定字段的排序方式,可以加上ASC或者DESC关键字进行排序。但当关键字省略时,SQL查询默认按照ASC(升序)排序。在本例中,由于3个字段都要取
高者,因而使用降序排列后再利用TOP取前两条记录。需要注意的是,3个字段后的关键字DESC不可省略,否则SQL查询将按照默认的升序进行排序,从而无法得到所需要的结果。

利用数学计算方法进行多列排序

    由于本例中所有参与排序的字段都为数字,因而除了可以利用多字段排序外,也可以将这些多个字段进行组合计算后再排序。如下列查询语句同样可以实现所需要的排序效果:

SELECT TOP 2 球队 AS 出线球队
FROM [sheet1$]
ORDER BY 积分*10000 DESC,(进球-失球)*100 DESC,进球 DESC

      上述语句排序是按照积分、净胜球和进球的优先级对这些字段进行了数字的组合。积分优先级最大,因而将积分乘以10000,净胜球优先级第2,将其乘以100,然后再将三者相加。其
得到的结果为1个数字,万位以上为积分,千位和百位为净胜球,十位和个位为进球。该结果恰能表示排序的优先级。
    一般情况下不建议采用该方式进行查询。因为在进行该语句查询时.SQL查询机制会计算所有记录的积分、净胜球、进球的运算结果,使得SQL运算量增加,从而降低了SQL查询速度。尤其是乘法、乘方或函数等运算,占用的系统资源将大大超过简单排序占用的系统资源,从而影响SQL的查询效率。当数据量较大时,会有比较明显的速度差异。因而,在进行单纯的捧序能够解决问题的情况下,应尽量避免使用运算符号或函数。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值