一、简介。
很多时候,我们进行数据库查询,并不需要清楚的知道每一条数据的全部信息。举个例子,我们想要知道仅仅是,某年每月产生至少两单的客户都有谁,但是,我们使用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 Server在 GROUP BY 子句之后处理 HAVING 子句,所以不能通过使用列别名来引用选择列表中指定的聚合函数。
以上的示例将失败,必须明确使用 HAVING 子句中的聚合函数表达式,像示例中那样,换成红色字体的表达式才能成功。
having子句也能同时和聚合函数以及group by语句同时使用。以下声明查找每年至少下过两个订单的客户:
在上面查询示例中,
首先, GROUP BY 子句按客户和订单年份对销售订单进行分组。 COUNT() 函数返回每个客户每年下达的订单数。其次, HAVING 子句筛选出订单数至少为 2 的所有客户。
以上就是SQL Server数据库查询中,分组数据的所有方法了,希望对你们有帮助