【MySQL】聚合查询与分组查询

我们先重建一个test库,在test库里新建一个people表(包含序列号,姓名,工资),再往表该表里新增六条数据:

mysql> drop database if exists test;
Query OK, 1 row affected (0.07 sec)mysql> create database test;
Query OK, 1 row affected (0.00 sec)mysql> use test;
Database changed
mysql> create table people(->     id int primary key auto_increment,->     name varchar(20),->     careen varchar(20),->     salary int-> );
Query OK, 0 rows affected (0.05 sec)mysql> insert into people value(null,"张三","老师",3000);
Query OK, 1 row affected (0.01 sec)mysql> insert into people value(null,"李四","老师",4000);
Query OK, 1 row affected (0.01 sec)mysql> insert into people value(null,"王五","老师",5000);
Query OK, 1 row affected (0.01 sec)mysql> insert into people value(null,"赵六","医生",60000);
Query OK, 1 row affected (0.00 sec)mysql> insert into people value(null,"小七","医生",70000);
Query OK, 1 row affected (0.00 sec)mysql> insert into people value(null,null,null,null);
Query OK, 1 row affected (0.00 sec)mysql> select * from people;
+----+--------+--------+--------+
| id | name   | careen | salary |
+----+--------+--------+--------+
|  1 | 张三   | 老师   |   3000 |
|  2 | 李四   | 老师   |   4000 |
|  3 | 王五   | 老师   |   5000 |
|  4 | 赵六   | 医生   |  60000 |
|  5 | 小七   | 医生   |  70000 |
|  6 | NULL   | NULL   |   NULL |
+----+--------+--------+--------+
6 rows in set (0.00 sec)

接下来我们就针对该表进行聚合查询操作~

♫聚合查询

前面我们所用的基础的查询操作只能对每行进行独立的查询操作,而要是想要查询的结果是该列所有数据的平均值,最大或最小值,则需要使用聚合查询才能做到。聚合查询需要用到聚合函数,因此,要学会聚合查询,首先得先了解下MySQL中的聚合函数。

♪聚合函数

常见的聚合函数有以下几种:

函数描述
COUNT([DISTINCT] expr)
返回查询到的数据的数量
AVG([DISTINCT] expr)
返回查询到的数据的总和,不是数字没有意义
SUM([DISTINCT] expr)
返回查询到的数据的平均值,不是数字没有意义
MAX([DISTINCT] expr)
返回查询到的数据的最大值,不是数字没有意义
MIN([DISTINCT] expr)
返回查询到的数据的最小值,不是数字没有意义

知道了聚合函数,接下来就可以使用这些聚合函数进行聚合查询操作了。

♪查询表的行数

查询表的行数需要用到聚合函数count():

语法:select count(*) from 表名;

mysql> select count(*) from people;
+----------+
| count(*) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

此外count(常量)也能查询表的行数:

语法:select count(常量) from 表名;

mysql> select count(1) from people;
+----------+
| count(1) |
+----------+
|        6 |
+----------+
1 row in set (0.00 sec)

注:

①.count(1)和count(*)的实现方式略有不同,count(1)是对表中的每一行都执行一次计数操作,而count(*)则是对整个表执行计数操作

②.查询表的行数包括全为NULL的行

♪查询表某一列的行数

单独查询表某一列有几行也是需要用到count():

语法:select count(列名/表达式) from 表名;

mysql> select count(name) from people;
+----------------+
| count(name) |
+----------------+
|              5 |
+----------------+
1 row in set, 5 warnings (0.00 sec)

注:查询某一列的行数不会包含NULL数据

♪查询表某一列数据的和

要想查询结果是某一列的数据和就需要用到聚合函数sum():

语法:select sum(列名/表达式) from 表名;

mysql> select sum(salary) from people;
+-------------+
| sum(salary) |
+-------------+
|      142000 |
+-------------+
1 row in set (0.00 sec)

注:只能查询数字列的和,不能求字符串/日期的和

♪查询表某一列数据的平均值

要查询某一列数据的平均值就需要用到聚合函数avg():

语法:select avg(列名/表达式) from 表名;

mysql> select avg(salary) from people;
+-------------+
| avg(salary) |
+-------------+
|  28400.0000 |
+-------------+
1 row in set (0.00 sec)

注:只能查询数字列的平均值

♪查询表某一列数据的最大值

要查询某一列数据的最大值就需要用到聚合函数max():

语法:select max(列名/表达式) from 表名;

mysql> select max(salary) from people;
+-------------+
| max(salary) |
+-------------+
|       70000 |
+-------------+
1 row in set (0.00 sec)

注:只能查询数字列的最大值

♪查询表某一列数据的最小值

要查询某一列数据的最小值就需要用到聚合函数min():

语法:select min(列名/表达式) from 表名;

mysql> select min(salary) from people;
+-------------+
| min(salary) |
+-------------+
|        3000 |
+-------------+
1 row in set (0.00 sec)

注:只能查询数字列的最小值

上面聚合查询的对象是所有人,要想查询的对象为同一职业的人,可以通过group by子句来实现。

♫分组查询

♪group by子句

select中使用 group by 子句可以对指定列进行分组查询。需要满足:使用group by 进行分组查询时,select 指定的字段必须是 分组依据字段 ,其他字段若想出现在 select 中则必须包含在聚合函
数中。

语法:select 列名,聚合函数,... from 表名 group by 列名;

-- 查询每种职业的最高薪资
mysql> select careen,max(salary) from people group by careen;
+--------+-------------+
| careen | max(salary) |
+--------+-------------+
| NULL   |        NULL |
| 医生   |       70000 |
| 老师   |        5000 |
+--------+-------------+
3 rows in set (0.01 sec)

如果是不带聚合函数的分组查询,查询结果为每个分组的第一条记录:

mysql> select * from people group by careen;
+----+--------+--------+--------+
| id | name   | careen | salary |
+----+--------+--------+--------+
|  6 | NULL   | NULL   |   NULL |
|  4 | 赵六   | 医生   |  60000 |
|  1 | 张三   | 老师   |   3000 |
+----+--------+--------+--------+
3 rows in set (0.01 sec)

分组查询还可以对分组前指定条件或对分组后指定条件:

♪分组前指定条件

对筛选出来的数据进行分组查询:

语法:select 列名,聚合函数,... from 表名 group by 列名 where 指定条件;

-- 取所有工资大于3000的人,对这类人按照对应职业进行分组查询
mysql> select careen,avg(salary) from people where salary>3000 group by careen;
+--------+-------------+
| careen | avg(salary) |
+--------+-------------+
| 医生   |  65000.0000 |
| 老师   |   4500.0000 |
+--------+-------------+
2 rows in set (0.02 sec)

♪分组后指定条件

对分组查询后的数据进行筛选:

语法:select 列名,聚合函数,... from 表名 group by 列名 having 指定条件;

-- -- 按照职业进行分组查询,取查询结果中平均工资大于5000的职业
mysql> select careen,avg(salary) from people group by careen having avg(salary)>5000;
+--------+-------------+
| careen | avg(salary) |
+--------+-------------+
| 医生   |  65000.0000 |
+--------+-------------+
1 row in set (0.00 sec)

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

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

相关文章

【mfc/VS2022】计图实验:绘图工具设计知识笔记

绘制曲线(贝塞尔曲线): 转自:CDC 类 | Microsoft Learn 绘制一条或多条贝塞尔曲线。 BOOL PolyBezier(const POINT* lpPoints,int nCount);参数 lpPoints 指向包含曲线端点和控制点的 POINT 数据结构数组。 nCount 指定 lpPo…

git 如何删除本地分支且并没有完全合并到目标分支中

git 如何删除本地分支且并没有完全合并到目标分支中 确保你当前所在的分支不是dev_welc_share_permission分支,如果是的话,可以执行以下命令切换到其他分支(比如master): git checkout master使用以下命令删除dev_s…

使用kaliber与imu_utils进行IMU、相机+IMU联合标定

目录 1 标定工具编译 1.1 IMU标定工具 imu_utils 1.2 相机标定工具 kaliber 2 标定数据录制 3 开始标定 3.1 IMU标定 3.2 相机标定 3.3 相机IMU联合标定 4 将参数填入ORBSLAM的文件中 1 标定工具编译 1.1 IMU标定工具 imu_utils 标定IMU我们使用imu_utils软件进行标定…

router和route的区别?

router(路由器)和route(路由)是计算机网络中的两个概念,它们有不同的含义和作用。 Router(路由器): 路由器是一种网络设备,用于连接多个网络,并在网络之间转发…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux CentOS8安装gitlab_ce步骤

1 下载安装包 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm/download.rpm2 安装gitlab yum install policycoreutils-python-utilsrpm -Uvh gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm3 更新配…

在conda创建的虚拟环境中安装jupyter以及使用

1. 进入你的虚拟环境 conda activate conda_env_name 2. 安装jupyter notebook conda install -y jupyter 3. 启动jupyter jupyter notebook 4. 将conda环境添加到jupyter的内核中 conda install ipykernel python -m ipykernel install --name conda_env_namepython -m…

Stm32_标准库_12_串口_发送数据

波特率:约定的传输速率,1000bps,1s发1000位 引脚 结构 数据帧的传输特点 代码: #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h"GPIO_InitTypeDef GPIO_InitStruct; USART…

2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人…

【算法-动态规划】两个字符串的删除操作-力扣 583

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程,加载maven的时候报错: 这个问题以前遇到过,这是因为 mysql-connector-j 没有带版本号的原因,但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗,为什么还会报错&…

Redis 集群 Redis 事务 Redis 流水线 Redis 发布订阅 Redis Lua脚本操作

Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 Redis 集群linux安装redis主从配置查看当前实例主从信息 Redis Sentinelsentinel Redis Cluster Redis 事务Redis 流水线Redis 发布订阅Redis Lua脚本操作 Redis 集群 linux安装redis 下载安装包&#…

VSCODE配置C和C++

VSCode 运行 C/C 怎么配置? - 忆梦怀思的回答 - 知乎 https://www.zhihu.com/question/577315418/answer/3232537840 这个很好用,简单明白。 其中最后我的只配置了tasks.json就成功了。

五子棋(C语言实现)

目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版: game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了,大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…

C++算法:最短回文串

题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1: 输入:s “aacecaaa” 输出:“aaacecaaa” 示例 2: 输入:s “abcd” 输…

hive数据的导入导出

目录 分区表: 分桶表: 数据导出 普通表: load data【 local 】 inpath 数据文件路径 [overwrite] into table 表名 ; --overwrite into table 覆盖添加 -- intotable 追加 从linux本地导入数据到表中 load data local inpath /home…

Django框架集成Celery异步-【2】:django集成celery,拿来即用,可用操作django的orm等功能

一、项目结构和依赖 study_celery | --user |-- models.py |--views.py |--urls.py |--celery_task |--__init__.py |--async_task.py |-- celery.py | --check_task.py | --config.py | --scheduler_task.py | --study_celery | --settings.py | --manage.py 依赖&#xff1a…

ChatGPT

chatgpt使用地址 https://mycaht.top/#/chat 申请内测免费key https://github.com/chatanywhere/GPT_API_free 设置 接口地址设置改成 https://api.chatanywhere.com.cnAPI Key设置成申请出来的免费key 开始聊天

Spring MVC中通过配置文件配置定时任务

Spring MVC中配置定时任务(配置文件方式) 1.步骤 1.步骤 1-1 在springmvc.xml(配置文件)的beans中添加 xmlns:task"http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http…

关于网络协议的若干问题(五)

1、DH 算法会因为传输随机数被破解吗? 答:DH 算法的交换材料要分公钥部分和私钥部分,公钥部分和其他非对称加密一样,都是可以传输的,所以对于安全性是没有影响的,而且传输材料远比传输原始的公钥更加安全。…