首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第1章 数据库和SQL
1-1 数据库是什么
我们身边的数据库
为什么DBMS那么重要
DBMS的种类
1-2 数据库的结构
RDBMS的常见系统结构
表的结构
1-3 SQL概要
标准SQL
SQL语句及其种类
SQL的基本书写规则
1-4 表的创建
表的内容的创建
数据库的创建(CREATE DATABASE语句)
表的创建(CREATE TABLE语句)
命名规则
数据类型的指定
约束的设置
1-5 表的删除和更新
表的删除(DROP TABLE语句)
表定义的更新(ALTER TABLE语句)
向Product表中插入数据
第2章 查询基础
2-1 SELECT语句基础
列的查询
查询出表中所有的列
为列设定别名
常数的查询
从结果中删除重复行
根据WHERE语句来选择记录
注释的书写方法
算术运算符
需要注意NULL
比较运算符
对字符串使用不等号时的注意事项
不能对NULL使用比较运算符
2-3 逻辑运算符
NOT运算符
AND运算符和OR运算符
通过括号强化处理
逻辑运算符和真值
含有NULL时的真值
第3章 聚合与排序
3-1 对表进行聚合查询
聚合函数
计算表中数据的行数
计算NULL之外的数据的行数
计算合计值
计算平均值
计算值和小值
使用聚合函数删除重复值(关键字DISTINCT)
3-2 对表进行分组
GROUP BY子句
聚合键中包含NULL的情况
使用WHERE子句时GROUP BY的执行结果
与聚合函数和GROUP BY子句有关的常见错误
3-3 为聚合结果指定条件
HAVING子句
HAVING子句的构成要素
相对于HAVING子句,更适合写在WHERE子句中的条件
3-4 对查询结果进行排序
ORDER BY子句
指定升序或降序
指定多个排序键
NULL的顺序
在排序键中使用显示用的别名
ORDER BY子句中可以使用的列
不要使用列编号
当前位置:
首页>>
技术小册>>
SQL基础教程(上)
小册名称:SQL基础教程(上)
### 3-1 对表进行聚合查询 在数据库管理系统中,聚合查询是一种强大的工具,它允许我们根据一组行计算出单个值,如总和、平均值、最大值、最小值或计数等。这些操作对于数据分析、报告生成以及理解数据分布至关重要。在本章“3-1 对表进行聚合查询”中,我们将深入探讨SQL中的聚合函数及其使用方法,了解如何通过聚合查询从表中提取有价值的信息。 #### 3.1.1 聚合函数简介 SQL提供了几种内置的聚合函数,用于对一组值执行计算并返回一个结果。这些函数包括: - **COUNT()**:计算行数。 - **SUM()**:计算数值列中值的总和。 - **AVG()**:计算数值列中值的平均值。 - **MAX()**:找出列中的最大值。 - **MIN()**:找出列中的最小值。 #### 3.1.2 使用COUNT()函数 `COUNT()`函数是最基本的聚合函数之一,用于计算表中的行数或者特定条件下的行数。它有两种常见用法:`COUNT(*)`和`COUNT(列名)`。 - **COUNT(*)**:计算包括NULL值在内的所有行数。 ```sql SELECT COUNT(*) FROM employees; ``` 这条语句会返回`employees`表中的总行数。 - **COUNT(列名)**:计算指定列中非NULL值的数量。 ```sql SELECT COUNT(email) FROM employees; ``` 这条语句会返回`employees`表中`email`列非NULL值的数量。 #### 3.1.3 使用SUM()、AVG()函数 `SUM()`和`AVG()`函数通常用于数值列,以计算总和或平均值。 - **SUM()**示例: ```sql SELECT department_id, SUM(salary) AS total_salary FROM employees GROUP BY department_id; ``` 此查询按`department_id`分组,并计算每个部门的总薪资。 - **AVG()**示例: ```sql SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id; ``` 此查询同样按`department_id`分组,但计算的是每个部门的平均薪资。 #### 3.1.4 使用MAX()和MIN()函数 `MAX()`和`MIN()`函数用于找出列中的最大值和最小值,它们同样适用于数值列和非数值列(如字符串,但在非数值列中主要用于日期或文本排序)。 - **MAX()**示例: ```sql SELECT MAX(salary) AS highest_salary FROM employees; ``` 这条语句会返回`employees`表中薪资最高的值。 - **MIN()**示例: ```sql SELECT MIN(hire_date) AS earliest_hire_date FROM employees; ``` 这条语句会返回`employees`表中最早的入职日期。 #### 3.1.5 GROUP BY子句 在进行聚合查询时,`GROUP BY`子句至关重要。它允许我们将结果集按照一个或多个列进行分组,以便对每个分组独立应用聚合函数。 - **单列分组**: ```sql SELECT department_id, COUNT(*) AS num_employees FROM employees GROUP BY department_id; ``` 按`department_id`分组并计算每个部门的员工数。 - **多列分组**: ```sql SELECT department_id, job_title, COUNT(*) AS num_employees FROM employees GROUP BY department_id, job_title; ``` 同时按`department_id`和`job_title`分组,计算每个部门内每个职位的员工数。 #### 3.1.6 HAVING子句 虽然`WHERE`子句用于过滤行,但`HAVING`子句用于过滤分组后的结果集。它通常与`GROUP BY`一起使用,以应用条件到聚合函数的结果上。 - **HAVING示例**: ```sql SELECT department_id, AVG(salary) AS average_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; ``` 这条语句查找平均薪资超过50000的部门及其平均薪资。 #### 3.1.7 聚合查询的注意事项 - **非聚合列的选择**:在`SELECT`语句中使用`GROUP BY`时,所有非聚合列都必须包含在`GROUP BY`子句中。 - **空值处理**:聚合函数如`COUNT(列名)`会忽略NULL值,而`COUNT(*)`会计算所有行。 - **性能考虑**:聚合查询可能涉及大量数据的处理,特别是在大型数据库上执行时。优化查询(如使用索引、减少数据扫描量)是提高性能的关键。 - **理解数据**:在进行聚合查询之前,了解数据的结构和分布对于选择正确的聚合函数和分组策略至关重要。 #### 3.1.8 实战练习 为了巩固所学知识,以下是一些实践练习题目,建议读者尝试解答: 1. 查询每个部门员工数量的分布情况。 2. 计算公司内各职位的平均薪资,并筛选出平均薪资超过一定水平的职位。 3. 分析每个部门薪资最高和最低的员工的详细信息。 通过这些练习,读者不仅能加深对聚合查询的理解,还能学会如何根据实际情况灵活运用SQL进行数据分析。 ### 结语 在数据库管理和数据分析领域,掌握聚合查询是不可或缺的技能。通过对本章内容的学习,读者应该能够熟练使用SQL中的聚合函数(如`COUNT()`、`SUM()`、`AVG()`、`MAX()`、`MIN()`)以及`GROUP BY`和`HAVING`子句来执行复杂的聚合查询。这些技能将帮助读者从数据库中提取出有价值的信息,为数据驱动的决策提供有力支持。
上一篇:
第3章 聚合与排序
下一篇:
聚合函数
该分类下的相关小册推荐:
PostgreSQL入门教程
高性能的Postgres SQL
SQL基础教程(下)
SQL基础教程(中)