数据库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 :用于过滤分组后的数据,通常与聚合函数一起使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据管理能力成熟度评估模型(DCMM)全面解析:标准深度剖析与实践创新

文章目录 一、DCMM模型的战略价值与理论基础1.1 DCMM的本质与战略定位1.2 DCMM的理论基础与创新点 二、DCMM模型的系统解构与逻辑分析2.1 八大能力域的有机关联与系统架构2.2 五级成熟度模型的内在逻辑与演进规律 三、DCMM八大能力域的深度解析与实践创新3.1 数据战略&#xff…

Docker搜索镜像报错

科学上网最方便。。。。 主要是镜像的问题 尝试一: 报错处理 Error response from daemon: Get https://index.docker.io/v1/search?qmysql&n25: dial tcp 31.13.84.2:443: i/o timeout Error response from daemon: Get https://index.docker.io/v1/se…

ERP系统源码,java版ERP管理系统源码,云端ERP

一套开箱即用的云端ERP系统源代码,小型工厂ERP系统源码 SaaS ERP是一套开箱即用的云端ERP系统,有演示,开发文档,数据库文档齐全,自主版权落地实例,适合项目二开。 SaaS ERP具有高度的灵活性和可扩展性&am…

Sliding Window Attention(Longformer)

最简单的自注意力大家肯定都会啦。 但这种全连接的自注意力(即每个 token 需要 attend 到输入序列中的所有其他 token)计算与内存开销是 O ( n 2 ) O(n^2) O(n2) 。为了缓解这个问题,研究者们提出了 Sliding Window Attention。 Sliding W…

在Window10 和 Ubuntu 24.04LTS 上 Ollama 在线或离线安装部署

Ollama 是一个开源的大型语言模型(LLM)服务框架,旨在通过轻量化、跨平台的设计,简化大模型在本地环境中的部署与应用。其基于 Go 语言开发,通过 Docker 容器化技术封装模型运行环境,提供类似命令行工具的交…

在Ubuntu系统中安装桌面环境

在 Ubuntu 系统中安装桌面环境可以通过包管理器 apt 或工具 tasksel 实现。以下是详细的安装方法和常见桌面环境的选择: --- ### **1. 准备系统更新** 在安装前,建议更新软件源和系统包: bash sudo apt update && sudo apt upgrade…

【云备份】服务端业务处理模块设计与实现

目录 一. 业务处理模块的任务 二. 网络通信接口设计 2.1.文件上传 2.2.展示页面获取 2.3.文件下载 三.业务处理类设计 3.1.业务处理类的代码框架编写 3.2.文件上传代码编写 3.3.展示页面的获取代码编写 3.4.文件下载代码编写——下载篇 3.4.文件下载代码编写——断…

基于SpringBoot的漫画网站设计与实现

1.1项目研究的背景 困扰管理层的许多问题当中,漫画信息管理一定是不敢忽视的一块。但是管理好漫画网站又面临很多麻烦需要解决,如何在工作琐碎,记录繁多的情况下将漫画网站的当前情况反应给相关部门决策等等。在此情况下开发一款漫画网站,于是乎变得非常合乎时宜。…

学习记录:DAY22

假日尾声:技术进阶与自我反思 前言 于是,假日迎来了它的尾声,把快乐和焦躁都留存在昨天。 我只觉情感的自相矛盾在加重,学习让我焦躁,纵欲无法填补空虚,于是我的心被拖入了无止尽的拉扯中。 我还没有找到必…

Oracle OCP认证考试考点详解083系列07

题记: 本系列主要讲解Oracle OCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。 31. 第31题: 题目 解析及答案: 从 Oracle 19c 开始,数据库配置助手(DBCA)在克…

专业课复习笔记 4

前言 实际上对于我的考研来说,最重要的两门就是数学和专业课。所以从今天开始,我尽可能多花时间学习数学和专业课。把里面的知识和逻辑关系理解清楚,把常考的内容练习透彻。就这样。 寻址方式 立即数寻址 操作数在指令里面直接提供了。 …

Go小技巧易错点100例(三十)

本期分享: 1.切片共享底层数组 2.获取Go函数的注释 切片共享底层数组 在Go语言中,切片和数组是两种不同的元素,但是切片的底层是数组,并且还有一个比较重要的机制:切片共享底层数组。 下面这段代码演示了切片&…

反转字符串2

reverse函数的用法(reverse一般是左闭右开区间): 1.反转数组: int arr[] {1, 2, 3, 4, 5}; int n sizeof(arr) / sizeof(arr[0]); // 反转数组arr的全部元素 reverse(arr, arr n); 2.反转字符串: string str "he…

企业可用免费软件 | 7-Zip,压缩率比 WinZip 高10%!

7-Zip是一款出色的文件压缩和存档工具,但实际上许多小伙伴们并不了解。它是一款开源的免费软件,目前支持87种语言,适用于所有系统,软件操作界面也十分简洁,大部分代码都在GNU LGPL许可下。除了免费无广告的优点之外&am…

Gradio全解20——Streaming:流式传输的多模态应用(1)——Mistral-7B实现流式传输音频:魔力8号球

Gradio全解20——Streaming:流式传输的多模态应用(1)——Mistral-7B实现流式传输音频:魔力8号球 前言本篇摘要20. Streaming:流式传输的多模态应用20.1 Mistral-7B实现流式传输音频:魔力8号球20.1.1 工作原…

Qt实现网页内嵌

文章目录 一、环境准备 二、代码实现 三、测试 一、环境准备 首先,确保你的Qt安装包含了QtWebEngine模块。我的Qt是5.12.9并且使用MSVC来编译项目。在项目文件中需要添加以下配置,其中在Qt中配置MSVC,建议去看看这位大佬的博客&#xff1a…

conda管理python环境

其他文章 服务容错治理框架resilience4j&sentinel基础应用---微服务的限流/熔断/降级解决方案-CSDN博客 conda管理python环境-CSDN博客 快速搭建对象存储服务 - Minio,并解决临时地址暴露ip、短链接请求改变浏览器地址等问题-CSDN博客 大模型LLMs的MCP入门-…

Android工厂模式

前言 工厂模式是创建型模式,使我们常用/常见的模式之一。多用于需要生成复杂对象的地方。用new就可以完成创建的对象就无需使用。工厂模式降低了对象之间的耦合度,由于工厂模式依赖抽象的架构,实例化的任务交由子类去完成,所以有…

【AI面试准备】数据驱动测试思维与实践指南

面试题:数据驱动思维 构建测试数据集:收集代码覆盖率、缺陷历史等数据。 模型训练优化:使用Jupyter Notebook分析特征重要性。 数据驱动思维是一种以数据为核心、基于数据分析结果进行决策的方法论。它强调通过量化分析、模式识别和预测建模…

内存碎片深度剖析

目录 什么是内存碎片 内部碎片的解决 malloc STL二级空间配置器 外部碎片的解决 伙伴系统算法 slab分配器 什么是内存碎片 内存碎片是指在内存中存在的一些不连续的、较小的空闲内存块,这些小块内存由于太小而无法被有效地分配给程序使用,从而导…