1. Group By 语句简介:
Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”。它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
P.S. 这里真是体会到了一个好的命名的力量,Group By从字面是直接去理解是非常好理解的。恩,以后在命名的环节一定要加把劲:)。话题扯远了。
2. Group By 的使用:
上面已经给出了对Group By语句的理解。基于这个理解和SQL Server 2000的联机帮助,下面对Group By语句的各种典型使用进行依次列举说明。
2.1 Group By [Expressions]:
这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProductPlace)为联合主键:
FruitName
|
ProductPlace
|
Price
|
Apple
|
China
|
$1.1
|
Apple
|
Japan
|
$2.1
|
Apple
|
USA
|
$2.5
|
Orange
|
China
|
$0.8
|
Banana
|
China
|
$3.1
|
Peach
|
USA
|
$3.0
|
如果我们想知道每个国家有多少种水果,那么我们可以通过如下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.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来进行理解的。还是基于如下这样一个数据集:
FruitName
|
ProductPlace
|
Price
|
Apple
|
China
|
$1.1
|
Apple
|
Japan
|
$2.1
|
Apple
|
USA
|
$2.5
|
Orange
|
China
|
$0.8
|
Banana
|
China
|
$3.1
|
Peach
|
USA
|
$3.0
|
首先我们不使用带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来代替聚合函数的返回值
分享到:
相关推荐
4. GROUP BY语句:用于对查询结果进行分组。 5. HAVING语句:用于对分组结果进行筛选。 例如: SELECT 字段名1, 字段名2, …… FROM 表名 WHERE 条件 GROUP BY 字段名 HAVING 条件; 四、SQL*Plus命令: 1. ...
### SQL语句中Group BY 和Rollup以及Cube用法 #### Group BY 子句 `GROUP BY`子句是SQL查询中的一个非常重要的部分,它用于将数据表中的行按照一个或多个列进行分组,使得可以对每个分组执行聚合函数(如SUM、...
根据给定文件中的标题“SQL语句练习及答案”与描述“一个非常适合在笔试前看的SQL练习题。也可在在平时作为SQL语言练习题来使用”,我们可以看出这份材料主要包含了一系列针对SQL语言的练习题及其解答,适用于考前...
此外,SQL 语句还可以使用 JOIN 语句、SUBQUERY 语句、GROUP BY 语句、HAVING 语句等等,以满足不同的数据查询和分析需求。 SQL 语句大全总结提供了完整的 SQL 教程,涵盖了基础语句语法、函数教程、高级编程教程...
SQL 语句:SELECT 课程号, AVG(作业1 成绩 + 作业2 成绩 + 作业3 成绩) AS 平均成绩 FROM 学生作业表 GROUP BY 课程号 HAVING AVG(作业1 成绩 + 作业2 成绩 + 作业3 成绩) > 80; 查询结果截图: 四、实验总结 通过...
例如,要抓出营业额超过$1,000且店名为Los Angeles的资料,可以使用以下SQL语句: SELECT store_name FROM Store_Information WHERE Sales > 1000 AND store_name = 'Los Angeles' SQL语句基础教程旨在帮助新手和...
SQL语句:delete tablename where 自动编号 not in (select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数) 3. 显示所有可能的比赛组合 知识点:联合查询、where关键字 使用联合查询...
本文将深入探讨“SQL语句总结”这一主题,特别关注MySQL数据库的常用操作。 首先,我们从基础的数据库操作开始,即CRUD(Create、Read、Update、Delete),它们构成了所有数据库操作的核心。 1. **创建(Create)*...
SQL GROUP BY 语句 SQL GROUP BY 语句
SQL GROUP BY 语句是数据库查询中非常重要的一个部分,它允许我们对数据进行分组,以便于统计和分析。在处理大型数据集时,GROUP BY 与聚合函数(如 SUM、COUNT、AVG、MAX 和 MIN)一起使用,能够帮助我们汇总数据,...
在 SQL 语句中,还有许多其他的语句和函数,例如 GROUP BY、HAVING、JOIN 等。这些语句和函数可以帮助我们更好地操作和分析数据。 SQL 语句是一种功能强大且灵活的语言,用于管理和操作关系数据库管理系统。通过...
* GROUP BY 语句:用于分组数据 * HAVING 语句:用于指定分组条件 * ORDER BY 语句:用于排序数据 * LIMIT 语句:用于限制查询结果的数量 三、 创建数据库结构 SQL 语句可以用来创建数据库结构,包括数据库表、...
本文将对SQL语句简单面试题进行详细的知识点总结,包括Group By语句、Case When语句、日期判断语句等多个知识点。 1. Group By语句: 在第一道面试题中,需要使用Group By语句对表中的数据进行分组统计。Group By...
以下是对"Oracle的SQL语句的一些经验总结"中可能涉及的关键知识点的详细阐述: 1. **基本查询**:SQL的基础是SELECT语句,用于从表中提取数据。例如,`SELECT column1, column2 FROM table_name;`用于获取指定列的...
GROUP BY 是 SQL 中的一种分组查询语句,通常与聚合函数配合使用。GROUP BY 语句根据一个或多个列将查询结果分组,并对每组计算聚合函数的值。 在使用 GROUP BY 语句时,需要注意以下几点: 1. select 语句中所有...
### SQL语句练习知识点解析 #### 一、创建数据库与数据表 1. **创建数据库:** - **SQL语句:** `CREATE DATABASE student;` - **知识点解析:** 这条命令用于创建一个新的数据库`student`。在创建数据库时,...
3. **执行分页查询**:使用动态生成的SQL语句执行查询,并通过设置`ROWCOUNT`来限制返回的结果集大小。 ### 综合运用`GROUP BY`、存储过程和分页技术 在给定的存储过程中,`GROUP BY`子句与分页查询的结合使用提供...
**JsonSQL: SQL语句解析JSON文件** 在大数据处理和Web应用中,JSON(JavaScript Object Notation)格式已经成为数据交换的常见格式。然而,对于习惯使用SQL查询关系型数据库的人来说,处理JSON数据可能会觉得不太...
### SQL语句一 #### 原始SQL语句: ```sql select *, (select count(0) from [picture] where album_id = [album].id) as piccount From [Album] Where id in (5,6,8,1,3,4) orderby charindex(',' + ltrim(rtrim...