1. SQL中分组短语是什么
SQL中分组短语是:group by。
GROUP BY 语句 GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。GROUP BY 语法 SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name Group By 的使用:1、Group By [Expressions]:这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。
在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:如果我们想知道每个国家有多少种水果,那么我们可以通过如下SQL语句来完成:SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国 FROM T_TEST_FRUITINFO GROUP BY ProductPlace这个SQL语句就是使用了Group By + 分组字段的方式,那么这句SQL语句就可以解释成“我按照出产国家(ProductPlace)将数据集进行分组,然后分别按照各个组来统计各自的记录数量。”
很好理解对吧。这里值得注意的是结果集中有两个返回字段,一个是ProductPlace(出产国),一个是水果种类。
如果我们这里水果种类不是用Count(*),而是类似如下写法的话:SELECT FruitName, ProductPlace FROM T_TEST_FRUITINFO GROUP BY ProductPlace那么SQL在执行此语句的时候会报如下的类似错误:选择列表中的列 'T_TEST_FRUITINFO.FruitName' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。这就是我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。
我们可以将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。
这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是目前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。
2、Group By All [expressions] :Group By All + 分组字段, 这个和前面提到的Group By [Expressions]的形式多了一个关键字ALL。这个关键字只有在使用了where语句的,且where条件筛选掉了一些组的情况才可以看出效果。
在SQL Server 2000的联机帮助中,对于Group By All是这样进行描述的:如果使用 ALL 关键字,那么查询结果将包括由 GROUP BY 子句产生的所有组,即使某些组没有符合搜索条件的行。没有 ALL 关键字,包含 GROUP BY 子句的 SELECT 语句将不显示没有符合条件的行的组。
其中有这么一句话“如果使用ALL关键字,那么查询结果将包含由Group By子句产生的所有组。没有ALL关键字,那么不显示不符合条件的行组。”
这句话听起来好像挺耳熟的,对了,好像和LEFT JOIN 和 RIGHT JOIN 有点像。其实这里是类比LEFT JOIN来进行理解的。
还是基于如下这样一个数据集:首先我们不使用带ALL关键字的Group By语句:SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国 FROM T_TEST_FRUITINFO WHERE (ProductPlace <> 'Japan') GROUP BY ProductPlace那么在最后结果中由于Japan不符合where语句,所以分组结果中将不会出现Japan。现在我们加入ALL关键字:SELECT COUNT(*) AS 水果种类, ProductPlace AS 出产国 FROM T_TEST_FRUITINFO WHERE (ProductPlace <> 'Japan') GROUP BY ALL ProductPlace重新运行后,我们可以看到Japan的分组,但是对应的“水果种类”不会进行真正的统计,聚合函数会根据返回值的类型用默认值0或者NULL来代替聚合函数的7a686964616fe78988e69d8331333365643465返回值。
3、GROUP BY [Expressions] WITH CUBE | ROLLUP:首先需要说明的是Group By All 语句是不能和CUBE 和 ROLLUP 关键字一起使用的。首先先说说CUBE关键字,以下是SQL Server 2000联机帮助中的说明:指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。
在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。
使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。
GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。
我们通常的Group By语句是按照其后所跟的所有字段进行分组,而如果加入了CUBE关键字以后,那么系统将根据所有字段进行分组的基础上,还会通过对所有这。
2. 统计分组包括了哪些内容
根据统计研究的需要,将统计总体按照一个或 几个标志划分为若干部分,把属于同一性质的单位 集中在一起,把不同性质的单位区别开来,形成各种 不同类型部分的统计方法。
统计资料整理和分析的 基本方法之一。按一个标志分组,称简单分组;按两 个或两个以上的标志顺序连续分组称复合分组;还 可按品质标志和数量标志等进行分组。
目的是要按 照不同的标志把统计研究对象的本质特征正确地反 映出来,保持组内的同质性和组与组间的差别性,以 便进一步运用各种统计方法,研究总体的数量表现 和数量关系。
3. 求一分组统计SQL语句
select unit, sum(cnt) as cnt, sum(type1) as type1, sum(type2) as type2, sum(type3) as type3from (select unit, 1 as cnt, case when type = '1' then 1 else 0 end as type1, case when type = '2' then 1 else 0 end as type2, case when type = '3' then 1 else 0 end as type3from 表)group by unit。