淘先锋技术网

首页 1 2 3 4 5 6 7

目录

(一)前言

(二)Order by子句

1. 作用

2. ORDER BY 语句概述

3. 实例

(1)单字段排序

(2)多字段排序

(三)Group by子句

·1. 概述

2. 基本语法示例

(1)原始表

(2)Group by SQL基本写法

(3)Group by having SQL基本写法

3. 经典实例

(1)COUNT(*)+GROUP BY + HAVING

 (2)SUM()+GROUP BY+ORDER BY


(一)前言

      如同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