目录
(一)前言
如同Where子句一样,在SQL语言中order by和group by是两个出现频率极高的子句,本篇中我将着重介绍下他们的使用方法,因为他们是极其实用的。
(二)Order by子句
1. 作用
ORDER BY 语句用于对结果集进行排序。一般放在一条完整SQL语句的最后,语法如下:
select * from 表名 order by 需要排序的字段名;
2. ORDER BY 语句概述
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
补充知识:
order by后面除了跟字段名之外,还可以跟数字,数字代表所筛选的结果集中列的序列位置编号,举个例子如下,此例子中从表C里选出了A和B两个字段并以第一个位置的字段(order by 1)排序,即A字段。
select A,B from C order by 1;
3. 实例
(1)单字段排序
以分公司编号顺序显示公司名称:
select * from [dbo].[Branches] order by branch_id;
select * from [dbo].[Branches] order by 1;
(2)多字段排序
以RULE_TYPE先做倒序排序显示,以RULE_ID做顺序排列。
select RULE_TYPE,RULE_ID from [dbo].[rules] order by 1 desc,2;
select RULE_TYPE,RULE_ID from [dbo].[rules] order by RULE_TYPE desc,RULE_ID
(三)Group by子句
·1. 概述
Group By从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
2. 基本语法示例
(1)原始表
首先看一张如下的原始表:
(2)Group by SQL基本写法
select 类别, sum(数量) as 数量之和 from A group by 类别
返回结果如下表,实际上就是分类汇总:
注意:
group by语句中select指定的字段必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数(合计函数)中。
常见的聚合(合计)函数如下表:
函数 | 作用 |
---|---|
sum(列名) | 求和 |
max(列名) | 最大值 |
min(列名) | 最小值 |
avg(列名) | 平均值 |
count(列名) | 统计记录数 |
(3)Group by having SQL基本写法
select 类别, sum(数量) as 数量之和 from A group by 类别 having sum(数量) <= 19
返回结果如下表,即在group by后得到的结果集中选取sum(数量)小于等于19的统计行。 having在此处有点类似于一个Where子句进行过滤。
Having与Where的区别
- where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。
3. 经典实例
(1)COUNT(*)+GROUP BY + HAVING
统计price>=49的记录时候,各个price分别有多少条记录:
SELECT Price,count(*) as '数量'
FROM [CUMULUS].[dbo].[spring05]
group by price
having price>=49
(2)SUM()+GROUP BY+ORDER BY
统计每个CATALOGUE PRICE下的总BP分别是多少,并按总BP的数值降序显示:
SELECT [Catalogue price],sum(Bp) as 'BP总和'
FROM [CUMULUS].[dbo].[spring05]
group by [Catalogue price]
order by sum(Bp) desc