3.2 对表分组 您所在的位置:网站首页 统计分组的原则和方法 3.2 对表分组

3.2 对表分组

2023-07-04 23:42| 来源: 网络整理| 查看: 265

目前为止,我们看到的聚合函数的使用方法,无论是否包含NULL,无论是否删除了重复数据,都是针对表中的所有数据进行的聚合处理。下面,我们先把表分成几组,然后再进行聚合处理。

按照商品种类来统计一下数据行数(=商品数量)

SELECT shohin_bunrui, COUNT(*) FROM Shohin GROUP BY shohin_bunrui;

 正常情况下,使用聚合函数,不管原数据有多少,最终的结果都是返回一行!但上图返回的结果集显示,不是这样的,这是为啥?

这是因为,使用GROUP BY子句时,会将表中的数据分为多个组进行处理

 分组之后再对每一个分组进行的聚合计算!所以,有三个分组,返回回来的也就有3行数据。

在GROUP BY子中指定的列称为聚合键或者分组列。由于能够决定表的切分方式,所以是非常重要的列。当然,GROUP BY子也和SELECT子句一样可以通过逗号分隔指定多列。

注意:聚合键中包含NULL时,在结果中会以“不确定”行(空行)的形式表现出来。

此外,GROUP BY子句的书写位置也有严格要求,一定要写在FROM语句之后(如果有WHERE子的话,需要写在WHERE子句之后)。如果无视子句的书写顺序,SQL会报错。

到目前为止的子句书写顺序:

现在我们已经知道了子句的书写顺序,为了让大家在写代码的时候更有逻辑性,我们现在着手理解一下,这几个语句之间的执行顺序!

没错,首先,语句先找到FROM之后的表格,然后从表格中找到符合WHERE条件的数据,之后对数据进行分组,再瞅瞅SELECT函数中是否有聚合函数之类的,对数据做聚合运算。

与聚合函数和GROUPBY子有关的常见错误 1、聚合键之外的列名书写在SELECT子句之中

 这里经常会出现的错误就是把聚合键之外的列名书写在SELECT子句之中。

SELECT shohin_mei, shiire_tanka, COUNT(*) FROM Shohin GROUP BY shiire_tanka;

报错原因:列名shohin mei并没有包含在GROUP BY子当中。具体的原理,可以考虑上面说的子句的执行顺序!

使用GROUPBY子句时,SELECT子中不能出现聚合键之外的列名。

2、GROUP BY子句中不能使用SELECT子句中定义的别名

报错原因:考虑SQL语句在DBMS内部的执行顺序。

在GROUP BY子句中不能使用SELECT子句中定义的别名。 

3、GROUP BY子句结果的显示是无序的

通常SELECT语句执行结果的显示顺序都是随机的。因此想要按照某种特定顺序进行排序的话,需要在SELECT语中进行指定。具体的方法将在第4节中学习

GROUP BY子句结果的显示是无序的

4、在WHERE子句中使用聚合函数

 实际上,只有 SELECT 子句和 HAVING 子句(以及之后将要学到的ORDER BY子句)中能够使用 COUNT 等聚合函数。并且,HAVING 子句可以非常方便的实现上述要求。下一节我们将会学习 HAVING 子句

只有SELECT子句和HAVING子句(以及ORDER BY子句)中能够使用聚合函数。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有