SQL数据库查询中使用order by子句对查询的数据结果进行排序,如按照某字段进行升序排列输出或降序排列输出。        

01

语法结构
SELECT
column_name1
,coulumn_name2
,function(column_name3)
FROM
       table_name
[WHERE Clause]
GROUP BY
 column_name1,column_name2
ORDER BY column_name1 ASC

这里是对上一节GROUP BY子句语法结构的扩展,实际工作中可以直接使用ORDER BY语句。如:

SELECT
column_name1
,coulumn_name2
FROM
       table_name
[WHERE Clause]
ORDER BY column_name1 ASC
  • 可以使用SELECT语句中任何字段来排序,可设定1个排序字段,也可以是多个;

  • 字段后加ASC表示对字段升序排列,加DESC表示对字段降序排列;不指定的话默认是ASC升序。

  • [WHERE Clause] 表示可选,语句中可以有WHERE条件,也可以没有WHERE条件。

02

实例
这里通过表data_learning.product进行举例,data_learning是之前的文章中创建的数据库。该表示例数据如下:

见:

SQL创建数据库和数据表

数据分析师的日常,公众号:数据分析师的日常SQL创建数据库和数据表

2.1 对一个字段进行排序

首先,我们来统计每个价格的商品数量,并按照价格升序排列,SQL如下

-- SELECT
       price
       ,count(*)
FROM
       data_learning.product
GROUP BY
       price    
ORDER BY
       price;

查询结果如下(部分),价格低的会排在前面:

如果要降序排列,那么使用ORDER BY price DESC

2.2 对多个字段进行排序

比如查询data_learning.product表中的的所有数据,优先按照product_name升序排列,再按price降序排列:

-- data_learning.productproduct_namepriceSELECT    
       product_id
       ,product_name
       ,price
FROM
       data_learning.product
ORDER BY
       product_name ASC,price DESC;

询结果如下(部分),从product_name=’T恤’的数据可以看出,当product_name相同时,按price降序排列:

ORDER BY子句后面可以直接跟列名,也可以跟列在查询中的位置数字,比如1,2,3…。如查询data_learning.product表中的的所有数据,优先按price降序排列,再按照product_name升序排列:    

-- data_learning.productpriceproduct_nameSELECT
       product_id
       ,product_name
       ,price
FROM
       data_learning.product
ORDER BY
       3 DESC,2 ASC;

查询结果如下(部分):

在日常工作中,我比较习惯用列位置数字,能少敲一些列名字母。

需要注意的是,不同数据库的排序机制不一样,如果查询的结果和我们期望的排序结果有差异,可以通过设置MySQL中的排序规则,或者在查询语句中指定排序规则来解决。