SQL必知必会 第十课 笔记——分组数据

第10课 分组数据
        这一课介绍如何分组数据,以便汇总表内容的子集。这涉及两个新SELECT语句子句:GROUP BY子句和HAVING子句。
10.1 数据分组
       目前为止的所有计算都是在表的所有数据或匹配特定的WHERE子句的数据上进行的。而使用分组可以将数据分为多个逻辑组,对每个组进行聚集计算。

10.2 创建分组
        分组是使用SELECT语句的 GROUP BY子句建立的。eg.:
输入▼
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
GROUP BY vend_id;
输出▼
vend_id    num_prods
--------     -------
BRS01      3
DLL01       4
FNG01      2
        上面的SELECT语句指定了两个列:vend_id包含产品供应商的ID,num_prods为计算字段(用COUNT(*)函数建立)。GROUP BY子句指示DBMS按vend_id排序并分组数据。这就会对每个vend_id而不是整个表计算num_prods一次。

10.3 过滤分组
       SQL还允许过滤分组,规定包括哪些分组,排除哪些分组。例如,你可能想要列出至少有两个订单的所有顾客。为此,必须基于完整的分组而不是个别的行进行过滤,这就要用到Having.
       HAVING:Having非常类似于WHERE。事实上,目前为止所学过的所有类型的WHERE子句都可以用HAVING来替代。唯一的差别是, WHERE过滤行,而 HAVING过滤分组
eg:
SELECT cust_id, COUNT(*) AS orders
FROM Order
GROUP BY cust_id
HAVING COUNT(*) >= 2;
说明:HAVING和WHERE的差别
这里有另一种理解方法, WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤。

10.4 分组和排序
       GROUP BY和ORDER BY经常完成相同的工作,但它们非常不同,理解这一点很重要。表10-1汇总了它们之间的差别。
表10-1 ORDER BY与GROUP BY
       表10-1中列出的第一项差别极为重要。我们经常发现,用GROUP BY分组的数据确实是以分组顺序输出的。但并不总是这样,这不是SQL规范所要求的。
提示:不要忘记ORDER BY
       一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值