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

MySQL零基础教程12—聚合查询(聚合函数)

背景

有时候我们需要汇总一些数据,比如查询一个班级的平均分数,这个时候我们需要的是把分数汇总,然后计算出一个平均值进行返回,并不需要返回某一列的值,针对这种场景,mysql中提供了一些聚合函数帮助快速完成检索:

函数名功能说明示例场景
AVG()计算某列的平均值计算班级数学平均分
COUNT()统计某列的行数(或非 NULL 值的数量)统计学生总数
MAX()获取某列的最大值查找英语最高分
MIN()获取某列的最小值找出体育最低分
SUM()计算某列的总和计算全年级数学总分

接下来分别介绍每一个函数的用法。

AVG():计算平均值

仍然以下边的学生信息为例:
在这里插入图片描述
我们要统计这个班级学生的数学平均分:

select avg(math) as '三班数学平均分' from students;

在这里插入图片描述
注意,补充avg函数使用过程中的其他tips:

  1. 可以灵活和where等其他过滤条件组合
  2. avg函数只能计算单列的平均值,函数接受的参数就是列名
  3. 如果需要计算的目标列包含null值,avg函数会忽略该行

COUNT():计数

如果我们想要对表中的行数计算,可以使用count()函数,比如查询某个班级一共有多少人,就可以直接使用这个sql:

select count(*) from students;

在这里插入图片描述
count也可以接收列名作为参数,计算某一列的非空值的数量,比如我们想要查询参加这次数学考试的人数(需要过滤掉空值):

select count(math) from students;

在这里插入图片描述
从上边的例子可以看出,count可以接收两种参数:

  1. *:查询行数,但是不会过滤空值
  2. 列名:查询某一列行数,过滤空值

MAX():求最大值

max()函数用于求最大值,接收的参数也是列名,比如需要找出班级中的数学最高分:

select max(math) from students;

在这里插入图片描述
同样的,max()函数计算的时候也会忽略空值

另外,如果max()函数除了可以找到最大的数值,也可以用于计算最大日期,如果接收的参数列存储的是文本数据,排好序后,max()函数会返回最后一行

MIN():求最小值

找出班级数学最低分:

select min(math) from students;

在这里插入图片描述
min函数的注意事项和max一样,不再赘述,只不过用于求最小

SUM():求和函数

sum() 函数用于求和计算,比如求班级数学分数和(仅举例,虽然很少会有这个场景):

select sum(math) from students;

在这里插入图片描述
sum()函数还可以用来汇总计算值,举个例子,假如想要求出来班级三个科目的分数总和:

select sum(math+gym+en) from students;

在这里插入图片描述
sum()函数也会过滤掉空值

实际上所有的聚合函数都可以接收计算值作为参数,大家可以灵活运用

DISTINCT参数:去重

上边介绍了五个函数,它们的共同特点:

  1. 对所有行计算的时候,可以指定ALL参数(默认)或者不指定参数
  2. 如果需要去重,则可以使用DISTINCT函数

这里我们为了举的例子更加贴合实际场景,需要做一些新的数据准备,我们使用常见的订单场景来创建数据库和表信息:

-- 创建电商数据库
CREATE DATABASE IF NOT EXISTS ecommerce_db 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE ecommerce_db;

-- 创建订单表
CREATE TABLE orders (
    order_id VARCHAR(20) PRIMARY KEY COMMENT '订单号(唯一)',
    customer_name VARCHAR(50) NOT NULL COMMENT '下单人名称',
    order_date DATETIME NOT NULL COMMENT '下单时间',
    amount DECIMAL(10,2) NOT NULL COMMENT '订单金额'
);

INSERT INTO orders (order_id, customer_name, order_date, amount) VALUES
('ORD20231010001', '张三', '2023-10-10 09:15:23', 158.50),
('ORD20231010002', '李四', '2023-10-10 11:30:45', 299.00),
('ORD20231010003', '王五', '2023-10-10 14:20:11', 425.75),
('ORD20231011004', '张三', '2023-10-11 10:05:34', 78.90),
('ORD20231011005', '赵六', '2023-10-11 16:45:09', 650.00),
('ORD20231012006', '李四', '2023-10-12 08:30:17', 230.40),
('ORD20231012007', '孙七', '2023-10-12 13:15:28', 345.60),
('ORD20231013008', '王五', '2023-10-13 09:40:55', 99.99),
('ORD20231013009', '张三', '2023-10-13 17:20:03', 512.30),
('ORD20231014010', '周八', '2023-10-14 10:10:10', 188.00),
('ORD20231014011', '李四', '2023-10-14 15:25:47', 276.50),
('ORD20231015012', '吴九', '2023-10-15 11:11:11', 420.00),
('ORD20231015013', '王五', '2023-10-15 14:30:19', 155.75),
('ORD20231016014', '郑十', '2023-10-16 09:00:00', 333.33),
('ORD20231016015', '张三', '2023-10-16 12:45:38', 199.90),
('ORD20231017016', '李四', '2023-10-17 08:05:22', 488.60),
('ORD20231017017', '王五', '2023-10-17 16:20:14', 75.25),
('ORD20231018018', '钱多多', '2023-10-18 10:30:45', 666.66),
('ORD20231018019', '张三', '2023-10-18 14:15:03', 350.40),
('ORD20231019020', '李四', '2023-10-19 09:50:57', 245.80);

在上边的订单表中,存在同一个人有多个订单的场景,如果我们想要统计一共有多少名顾客下过单,可以很容易想到使用count(0函数,但是很明显存在一个人购买多次,存在多个订单记录的情况,所以需要对数据进行去重处理,这里可以根据下单人进行去重:

select count(distinct customer_name) as 下单人数 from orders;

在这里插入图片描述

组合使用

上边的举例都比较单一,实际上一个sql语句是可以同时使用多个聚合函数的,比如下边的场景:

-- 检查重复客户订单
SELECT 
    customer_name AS 客户名称,
    COUNT(*) AS 订单数量,
    SUM(amount) AS 总消费金额
FROM orders
GROUP BY customer_name
ORDER BY 订单数量 DESC;

在这里插入图片描述
以上就是关于聚类查询的简单介绍了,下期我们一起学习分组查询!

相关文章:

  • Go 语言环境安装
  • [预订酒店]
  • AI编程界的集大成者——通义灵码AI程序员
  • Linux与UDP应用2:简易聊天室
  • 利用出书策略结合定制开发开源AI智能名片S2B2C商城小程序获取私域流量的探索
  • 基于redis的位图实现签到功能
  • 委托者模式(掌握设计模式的核心之一)
  • 《操作系统 - 清华大学》 9 -1:进程调度:背景
  • 高频面试题(含笔试高频算法整理)基本总结回顾3
  • 零知识证明与 ZK Rollups 详解
  • 基于单片机的智能宿舍管理系统(论文+源码)
  • 如何让vllm使用modelscope而不是huggingface来下载模型?
  • C#光速入门的指南
  • XXL-JOB深度解析:新一代分布式任务调度解决方案
  • 分布式架构篇——分库分表与数据一致性保障
  • Educational Codeforces Round 175 (Rated for Div. 2)
  • KTV点歌系统
  • Windows逆向工程入门之MASM浮点数存储机制
  • 小米 SU7 Ultra:科技与性能的极致融合,FPC 隐匿的关键力量【新立电子】
  • 华为hcia——Datacom实验指南——STP工作基本原理及STP/RSTP基本功能配置
  • 中铁建设集团华北分公司网站/网络营销策划与推广
  • 个人做哪方面的网站/seo技术有哪些
  • 世界顶级网站设计/企业网站优化外包
  • 一般做网站带宽选择多大的/国内最近的新闻大事
  • 非经营性网站个人可以备案吗/seo快速排名软件网站
  • 安徽建设厅网站官网/seo工具有哪些