SQL入门教程第06课:排序及技巧应用

职场   2024-10-07 08:38   福建  

HI,大家好,我是星光。
排序是数据处理与分析过程中最常见的问题之一,Excel甚至专门对此内置了【排序】功能——今天我们来聊一下在SQL中如何对查询结果进行排序,也就是ORDER BY 语句,其基本语法如下:

SELECT 字段名 FROM 表名 ORDER BY 字段名

该语句默认对记录进行升序排序,如果需要降序排序,可以使用关键字DESC:


SELECT 字段名 FROM 表名  ORDER BY 字段名 DESC

照例举个小例子。


如下图所示,工作表名称为“销售表”,A~D列分别是月份、产品、、生产量和销售量,数据纯属虚拟,如有雷同——摊手,实属雷人。


如果我们需要查询该表月份和销售量两个字段的数据,并将销售量升序排列,代码如下:

SELECT 月份,销售量 FROM [销售表$] ORDER BY 销售量

如果我们需要查询月份、生产量、销售量三个字段的数据,其中生产量优先降序排列,销售量升序排列,代码如下:

SELECT 月份, 生产量, 销售量FROM [销售表$]ORDER BY 生产量 DESC, 销售量 ASC 

也就是说,ORDER BY语句中,优先排序的字段放在前面,不同字段可以指定不同的排序规则,如果没有指定排序规则,则默认为升序(ASC)排列。


代码运行结果如下:


……

依然使用该例子,倘若需要对查询结果按月份进行降序排列,有些朋友可能会将代码会写成如下模样:

SELECT 月份,销售量FROM [销售表$]ORDER BY 月份 DESC 

但发现结果和预想的并不一样。



月份的排列看起来完全是乱态的,既不是升序也不是降序。

上一期教程我们提到过,SQL In Excel对简体中文排序的规则不走寻常路,既不按拼音字母排序,也不按笔画排序,而是可能和其它数据库一样,采用的Chinese_PRC针对大陆简体字UNICODE的排序规则,但和其它数据库所不同的是,我们没有修改该规则参数的权限,无法实现按拼音或笔划排序的目的……

不过,事实上,即便是使用Excel自带的排序功能(默认拼音字母排序),排序结果也并非是五四三二一。

此时我们需要自定义排序规则,也就是使用SQL中的iif或者instr函数。


IF函数类似于工作表的IF函数,基本语法如下:

=IIF(条件表达式,真值结果,假值结果)

使用IIF函数实现自定义排序规则的SQL语句如下:


代码看不全可以左右拖动..
SELECT 月份,销售量 FROM [销售表$] ORDER BY    IIF(月份='五月',1,    IIF(月份='四月',2,      IIF(月份='三月',3,        IIF(月份='二月',4,          IIF(月份='一月',5)        )      )    )  ) 

代码长的吓人?


但意思其实很简单。

……如果月份等于五月,就返回1,否则如果月份等于四月,就返回2,再否则如果月份等于三月……以此类推……最后ORDER BY语句按IIF返回的结果进行升序排序……

看了这个代码,是不是瞬间找回当年嵌套N层IF函数的青葱小岁月……


再说下INSTR函数。

INSTR函数有些类似于工作表函数FIND,可以实现查找一个字符串在另一个字符串中的位置,和FIND不同的是,当找不到相关值时,其结果返回0,而非错误值。

基本语法格式如下:

INSTR(str, substr

使用INSTR函数自定义排序规则的SQL语句如下:


SELECT 月份,销售量FROM [销售表$]ORDER BY INSTR('五月,四月,三月,二月,一月',月份)

查询结果如下:



INSTR函数比起IIF函数来明显要简洁清爽的多。

——因此我们通常使用该函数处理自定义排序的问题。

……

提一个问题:

如果使用SQL语句查询上述示例中,销售量前三名的月份和销售量,又该怎么表述呢?

插播个广告稍后回来…▼

……


不要想的太复杂,其实很简单

在原本对销量进行降序排序的结果上,提取前三行的记录就okk啦。

提取前n行数据,可以使用关键字TOP

TOP n 指定检索结果集中的第n行前的记录。

SQL代码如下:


SELECT TOP 3 月份,销售量FROM [销售表$]ORDER BY 销售量 DESC

查询结果如下:



除了支持返回指定数量的记录外,TOP还支持按百分比返回记录,这需要使用到关键字PERCENT。

比如,返回前2%条记录,语法如下▼

SELECT TOP 2 PERCENT * FROM [销售表$] 

而如果需要返回销量占比20%的记录,可以搭配ORDER BY语句▼


SELECT TOP 20 PERCENT *FROM [销售表$]ORDER BY 销量

……


打个响指,没了,下期再见。



需要系统学习Excel却找不到优质教程?学习Excel的过程中遇到疑难问题,却找不到人及时作出解答?


加入我的付费社群,学习+训练+答疑,与6000+在线会员一起,同微软最有价值专家MVP同行,全面精进Excel之道


🚂>>~

加入我的付费会员,全面学习Excel

透视表 函数 图表 VBA PQ想学啥学啥

👀


本文由公众号“Excel星球”首发。
点击阅读原文系统学习Excel~

Excel星球
微软全球最有价值专家(Excel MVP),上千篇原创图文和视频教程随学随用,随用随查,建议常用Excel的职场人关注。
 最新文章