一、简介。

     很多时候,我们进行数据库查询,并不需要清楚的知道每一条数据的全部信息。举个例子,我们想要知道仅仅是,某年每月产生至少两单的客户都有谁,但是,我们使用where语句进行查询的话,查询出来的数据会十分具体,具体到这些客户每个月下单的日期和数量,这些数据我们并不想知道,所以,本期我们来讲一下“数据分组”这个方法。本期的方法仅针对SQL Server,在其他数据库软件是否有效,暂且不知。

二、group by语句

    group by 从字面意义上理解就是根据“by”指定的规则对数据进行分组,所谓的分组就是将一个数据集

划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

这样分组查询出来的数据只有每个客户,下单的年份。而具体的那些下单日期,以及具体的下单数量就不会显示出来。

三、聚合函数。

GROUP BY 子句通常与聚合函数一起用于统计数据。

聚合函数对组执行计算并返回每个组的唯一值。 例如, COUNT() 函数返回每个组中的行数。

其他常用的聚合函数是: 总数量SUM() , 平均值AVG() , 最小值MIN() , 最大值MAX()

GROUP BY 子句将行排列成组,聚合函数返回每个组的统计量。

如果要引用 GROUP BY 子句中未列出的任何列或表达式,则必须使用该列作为聚合函数的输入。

否则,数据库系统将会提示错误,因为无法保证列或表达式将为每个组返回单个值。

查询将失败:原因是 order_status 列未在 GROUP BY 子句中

四、having子句。

HAVING 子句通常与[GROUP BY]子句一起使用,以根据指定的条件列表过滤分组。 以下是 HAVING 子句

的语法:

在此语法中, GROUP BY 子句将行汇总为分组, HAVING 子句将一个或多个条件应用于这些每个分组。

只有使条件评估为 TRUE 的组才会包含在结果中。 换句话说,过滤掉条件评估为 FALSE UNKNOWN

组。

因为SQL ServerGROUP BY 子句之后处理 HAVING 子句,所以不能通过使用列别名来引用选择列表中指定的聚合函数。

以上的示例将失败,必须明确使用 HAVING 子句中的聚合函数表达式,像示例中那样,换成红色字体的表达式才能成功。

having子句也能同时和聚合函数以及group by语句同时使用。以下声明查找每年至少下过两个订单的客户:

 在上面查询示例中,

首先, GROUP BY 子句按客户和订单年份对销售订单进行分组。 COUNT() 函数返回每个客户每年下达的订单数。其次, HAVING 子句筛选出订单数至少为 2 的所有客户。

以上就是SQL Server数据库查询中,分组数据的所有方法了,希望对你们有帮助

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐