SQL第10课——分组数据

如何分组数据,方便汇总表内容的子集。

两个新的select语句子句:group by 子句和having 子句。

10.1 数据分组

选择ID为dll01的产品数量:

使用分组可以将数据分为多个逻辑组,对每个组进行聚集计算。

10.2 创建分组

分组使用select语句的group by子句建立的。

对每一个不同产品的ID,分开计算每一个ID对应的产品数:

group by 子句,不需要指定要计算和估值的每个组了。系统会自动完成,对每个组而不是整个结果进行聚集。

group by 子句的使用规定
1. group by 可以包含任意数目的列,可以对分组进行嵌套,更细致分组
2. 如果嵌套了,将在最后指定的分组上进行汇总
3. group by子句中列出的每一列都必须是检索列或有效的表达式
4. 大多数SQL实现不允许group by列带有长度可变的数据类型(文本或备注字段)
5. 除聚集计算语句外,select语句中的每一列都必须再group by 子句中给出。
6. 分组列中包含具有null值的行,则null将作为一个分组返回。列中有多行null的值,它们将被分成一组
7. group by 子句必须出现在where子句之后,order by 子句之前

10.3 过滤分组

过滤分组:规定包含 哪些分组,排除哪些分组。

使用having子句;

目前位置所学过的所有类型的where子句都可以用having来代替。唯一的差别是,where过滤行,having过滤分组。

过滤了两个以上订单的那些分组

having和where的差别
wherehaving
where在数据分组前进行过滤having在数据分组后进行过滤
where排除的行不包括在分组中影响having子句中基于where的计算值过滤掉的分组
where用于标准的行级过滤使用having应该结合group by子句

不指定group by ,having和where类似,等同对待。

 10.4 分组和排序

order by 与 group by的差别
order bygroup by
对产生的输出排序对行分组,但输出可能不是分组的顺序
任意列都可以使用(甚至非选择的列也可以使用)只可能使用选择列或者表达式列,而且必须使用每个选择列表达式
不一定需要如果与聚集函数一起使用列(或表达式),则必须使用

group by分组的数据虽然带有一定的顺序输出的,但是不是特意的,不具有排序的功能,所以对输出的结果需要满足一定的顺序输出的话,需要设定order by子句。

一般在使用group by子句时候,应该也给出order by子句,保证数据正确排序的唯一方法。

group by 子句按照order_num分组数据,以便count(*)函数能够返回每个订单中的物品数目,having子句过滤数据,使得只返回包含三个或更多物品的订单,最后使用order by子句排序输出。

10.5 select子句顺序

where > group by >having > order by

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值