当前位置: 首页 > news >正文

数据库MySQL学习——day9(聚合函数与分组数据)

文章目录

  • 1. 聚合函数
    • 1.1 COUNT() 函数
    • 1.2 SUM() 函数
    • 1.3 AVG() 函数
    • 1.4 MIN() 函数
    • 1.5 MAX() 函数
  • 2. GROUP BY 子句
    • 2.1 使用 GROUP BY 进行数据分组
    • 2.2 结合聚合函数
  • 3. HAVING 子句
    • 3.1 使用 HAVING 过滤分组数据
    • 3.2 HAVING 和 WHERE 的区别
  • 4. 实践任务
    • 4.1 创建一个销售表
    • 4.2 向表中插入数据
    • 4.3 使用聚合函数进行数据计算
      • 4.3.1 计算总销售额
      • 4.3.2 计算每个地区的总销售额
      • 4.3.3 计算平均销售额
      • 4.3.4 计算每个地区的平均销售额
      • 4.3.5 查找最大和最小销售额
    • 4.4 使用 HAVING 进行分组过滤
      • 4.4.1显示销售总额大于1500的地区
      • 4.4.2 显示平均销售额大于1000的地区
  • 5. 总结

1. 聚合函数

聚合函数用于在SQL中对一组数据进行计算,返回单一结果。以下是常用的聚合函数:

1.1 COUNT() 函数

COUNT()函数用于计算某个列中的行数,或计算符合条件的行数。

  • 计算某列的行数:
SELECT COUNT(column_name) FROM table_name;

这个查询会计算column_name列中非空值的数量。

  • 计算所有行数(包括NULL值):
SELECT COUNT(*) FROM table_name;
  • 计算符合条件的行数:
SELECT COUNT(*) FROM table_name WHERE condition;

1.2 SUM() 函数

SUM()函数用于计算某列的总和,通常用于数值类型的列。
计算总和:

SELECT SUM(column_name) FROM table_name;

该查询会返回column_name列的总和。

1.3 AVG() 函数

AVG()函数用于计算某列的平均值,通常也用于数值类型的列。

计算平均值:

SELECT AVG(column_name) FROM table_name;

该查询会返回column_name列的平均值。

1.4 MIN() 函数

MIN()函数用于获取某列中的最小值。

  • 计算最小值:
SELECT MIN(column_name) FROM table_name;

该查询返回column_name列中的最小值。

1.5 MAX() 函数

MAX()函数用于获取某列中的最大值。

计算最大值:

SELECT MAX(column_name) FROM table_name;

该查询返回column_name列中的最大值。

2. GROUP BY 子句

GROUP BY用于将数据按照某一列进行分组。分组后的每个组都会进行一次聚合操作,如计算总和、平均值等。

2.1 使用 GROUP BY 进行数据分组

GROUP BY按指定列对数据进行分组,并对每个组进行聚合操作。

按列分组:

SELECT column_name, COUNT(*) 
FROM table_name
GROUP BY column_name;

这个查询会按column_name进行分组,并计算每个组的行数。

2.2 结合聚合函数

你可以结合聚合函数与GROUP BY使用,计算每个分组的聚合值。

  • 按地区分组计算总销售额:
    假设有一个销售表,包含region(地区)和sales(销售额)列,可以按地区计算每个地区的总销售额:
SELECT region, SUM(sales)
FROM sales_data
GROUP BY region;
  • 这会显示每个地区的销售总额。
    按部门分组计算员工人数:
    假设有一个员工表,包含department(部门)和employee_id(员工ID)列,可以按部门计算每个部门的员工人数:
    ``sql
    SELECT department, COUNT(employee_id)
    FROM employees
    GROUP BY department;

## 2.3 多列分组
`GROUP BY`可以按多个列进行分组。
* 按地区和年份分组计算销售总额:
```sql
SELECT region, year, SUM(sales)
FROM sales_data
GROUP BY region, year;

3. HAVING 子句

HAVING子句用于在数据分组后进行过滤。与WHERE不同,WHERE是在数据分组前进行过滤,而HAVING是在分组后的结果上进行过滤。

3.1 使用 HAVING 过滤分组数据

HAVING子句可以与聚合函数一起使用,用来过滤掉不符合条件的分组。

  • 计算每个地区的销售总额,并只显示销售总额大于1000的地区:
SELECT region, SUM(sales)
FROM sales_data
GROUP BY region
HAVING SUM(sales) > 1000;

这个查询首先按地区分组,然后计算每个地区的销售总额,最后只显示销售总额大于1000的地区。

  • 计算每个部门的员工人数,并只显示员工人数大于10的部门:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 10;

3.2 HAVING 和 WHERE 的区别

  • WHERE:用于对原始数据进行过滤,WHERE是在聚合之前执行的。
  • HAVING :用于对分组后的数据进行过滤,HAVING是在聚合之后执行的。

例如:

  • WHERE过滤原始数据:
SELECT * FROM sales_data WHERE region = 'North';
  • HAVING过滤分组数据:
SELECT region, SUM(sales) FROM sales_data GROUP BY region HAVING SUM(sales) > 1000;

4. 实践任务

4.1 创建一个销售表

CREATE TABLE sales_data (id INT AUTO_INCREMENT PRIMARY KEY,region VARCHAR(100),sales DECIMAL(10, 2),year INT
);

4.2 向表中插入数据

INSERT INTO sales_data (region, sales, year) VALUES
('North', 1500.50, 2023),
('South', 1000.75, 2023),
('East', 500.00, 2023),
('West', 1200.30, 2023),
('North', 1800.00, 2024),
('South', 2000.00, 2024),
('East', 1200.00, 2024),
('West', 1500.00, 2024);

4.3 使用聚合函数进行数据计算

4.3.1 计算总销售额

计算所有地区的总销售额:

SELECT SUM(sales) AS total_sales FROM sales_data;

4.3.2 计算每个地区的总销售额

按地区分组计算每个地区的销售总额,可以使用GROUP BY:

SELECT region, SUM(sales) AS total_sales
FROM sales_data
GROUP BY region;

4.3.3 计算平均销售额

计算所有地区的平均销售额:

SELECT AVG(sales) AS average_sales FROM sales_data;

4.3.4 计算每个地区的平均销售额

按地区分组计算每个地区的平均销售额,使用以下语句:

SELECT region, AVG(sales) AS average_sales
FROM sales_data
GROUP BY region;

4.3.5 查找最大和最小销售额

使用MAX()和MIN()函数分别查找销售额的最大值和最小值:

  • 查找最大销售额:
SELECT MAX(sales) AS max_sales FROM sales_data;
  • 查找最小销售额:
SELECT MIN(sales) AS min_sales FROM sales_data;

4.4 使用 HAVING 进行分组过滤

使用HAVING子句来过滤已经分组的数据。例如,我们可以只显示销售总额大于1500的地区。

4.4.1显示销售总额大于1500的地区

SELECT region, SUM(sales) AS total_sales
FROM sales_data
GROUP BY region
HAVING SUM(sales) > 1500;

4.4.2 显示平均销售额大于1000的地区

SELECT region, AVG(sales) AS average_sales
FROM sales_data
GROUP BY region
HAVING AVG(sales) > 1000;

5. 总结

  • 聚合函数:用于计算一组数据的统计信息,如行数、总和、平均值、最大值、最小值等。
  • GROUP BY:用于将数据按指定列进行分组,并对每个组进行聚合计算。
  • HAVING :用于过滤分组后的数据,通常与聚合函数一起使用。

相关文章:

  • 机器学习中常见搜索算法
  • Java基础学完,继续深耕(0505)Linux 常用命令
  • Python学习之路(七)-绘画and动画
  • 【Linux】linux入门——基本指令
  • 人工智能数学基础(十)—— 图论
  • 一个电商场景串联23种设计模式:创建型、结构型和行为型
  • Paramiko 核心类关系图解析
  • 新型深度神经网络架构:ENet模型
  • 健康养生:从生活点滴启航
  • Sliding Window Attention(Longformer)
  • 自注意力(Self-Attention)和位置编码
  • ByteArrayOutputStream 类详解
  • 在Java中,什么是checked exception(即compile-time exception、编译时异常)?
  • 【学习笔记】机器学习(Machine Learning) | 第五章(3)| 分类与逻辑回归
  • Go小技巧易错点100例(三十)
  • DEX平台引领风尚 XBIT让数字资产回归简单与透明
  • 乐视系列玩机------乐视pro3精英版-x722的一些刷机救砖教程与固件资源
  • Gateway网关:路由和鉴权
  • Android控件View、ImageView、WebView用法
  • QT 在圆的边界画出圆
  • “五一”从昆明机场出境1.4万人次,较去年增长7.7%
  • 我驻旧金山总领事馆:黄石公园车祸中受伤同胞伤情稳定
  • 广西科学调度保障春灌面积1373.53万亩
  • “名额5分钟抢完”,一场花费上万元:越野赛凭什么这么火?
  • 媒体:机票盲盒值不值得开?年轻人正用行为博弈的逻辑重构规则
  • 人民日报头版头条:青春为中国式现代化挺膺担当